从 JavaScript 中的多维数组获取数组值
Getting array values from multidimensional array in JavaScript
我需要一些小帮助。我无法让一个数组 (larray3) 填充了另外两个数组对象(larray1 和 larray2)以将它们从 data.js 传递到后续的 model.js 和 view.js。 Data.js 正确构建多维数组,但是当模型收到结果时。js/view.js 我只收到 larray1 的结果。因为只有第一个值通过,所以我无法判断 larray1 和 larray2 是否真的通过了。有人可以告诉我应该如何更改 model.js 或 view.js 中的语法以访问两个数组值或我可以更改的其他内容吗?提前谢谢你。
data.js.
function getCountries(done) {
var sqlite3 = require('sqlite3').verbose();
var file = 'db/locations.sqlite3';
var db = new sqlite3.Database(file);
var larray1 = [];
var larray2 = [];
var larray3 = [];
db.all('SELECT * FROM Country', function(err, rows) {
// This code only gets called when the database returns with a response.
rows.forEach(function(row) {
larray1.push(row.CountryName);
larray2.push(row.CountryCode);
})
larray3.push(larray1);
larray3.push(larray2);
return done(larray3[0], larray3[1]);
});
db.close();
}
model.js
function Countries(done) {
//Pull location values from data
return getCountries(done);
}
view.js
function viewCountries() {
var viewCou = Countries(function(results) {
// Code only gets triggered when Countries() calls return done(...);
var container = document.getElementById('country-select');
var fragment = document.createDocumentFragment();
results.forEach(function(loc, index) {
var opt = document.createElement('option');
opt.innerHTML = loc;
opt.value = loc;
fragment.appendChild(opt);
});
container.appendChild(fragment);
})
}
在 data.js 中,您向 done
回调发送了两个参数:
return done(larray3[0], larray3[1]);
此 done
函数在您的 model.js:
中传递
return getCountries(done);
而 done
是从 view.js 传入的:
Countries(function(results) { // ...
所以在data.js中调用的就是这个匿名函数(function(results) {...}
)。但请注意,此函数只有一个参数,因此您对 data.js 发送的第二个参数什么都不做。 result
得到了 larray3[0]
的值,但是 larray3[1]
没有在任何地方被捕获。
您可以用不同的方式解决这个问题。我个人认为两个数组的设计从一开始就是错误的。我不会将成对的数据(名称和代码)分成两个不同的数组。
而是制作一个对象数组,然后传递单个数组:
在data.js中:
rows.forEach(function(row) {
larray1.push({
name: row.CountryName,
code: row.CountryCode
});
})
return done(larray1);
在view.js中:
opt.textContent = loc.name;
opt.value = loc.code;
旁注:在分配纯文本时,.textContent
优于 .innerHTML
。
我需要一些小帮助。我无法让一个数组 (larray3) 填充了另外两个数组对象(larray1 和 larray2)以将它们从 data.js 传递到后续的 model.js 和 view.js。 Data.js 正确构建多维数组,但是当模型收到结果时。js/view.js 我只收到 larray1 的结果。因为只有第一个值通过,所以我无法判断 larray1 和 larray2 是否真的通过了。有人可以告诉我应该如何更改 model.js 或 view.js 中的语法以访问两个数组值或我可以更改的其他内容吗?提前谢谢你。
data.js.
function getCountries(done) {
var sqlite3 = require('sqlite3').verbose();
var file = 'db/locations.sqlite3';
var db = new sqlite3.Database(file);
var larray1 = [];
var larray2 = [];
var larray3 = [];
db.all('SELECT * FROM Country', function(err, rows) {
// This code only gets called when the database returns with a response.
rows.forEach(function(row) {
larray1.push(row.CountryName);
larray2.push(row.CountryCode);
})
larray3.push(larray1);
larray3.push(larray2);
return done(larray3[0], larray3[1]);
});
db.close();
}
model.js
function Countries(done) {
//Pull location values from data
return getCountries(done);
}
view.js
function viewCountries() {
var viewCou = Countries(function(results) {
// Code only gets triggered when Countries() calls return done(...);
var container = document.getElementById('country-select');
var fragment = document.createDocumentFragment();
results.forEach(function(loc, index) {
var opt = document.createElement('option');
opt.innerHTML = loc;
opt.value = loc;
fragment.appendChild(opt);
});
container.appendChild(fragment);
})
}
在 data.js 中,您向 done
回调发送了两个参数:
return done(larray3[0], larray3[1]);
此 done
函数在您的 model.js:
return getCountries(done);
而 done
是从 view.js 传入的:
Countries(function(results) { // ...
所以在data.js中调用的就是这个匿名函数(function(results) {...}
)。但请注意,此函数只有一个参数,因此您对 data.js 发送的第二个参数什么都不做。 result
得到了 larray3[0]
的值,但是 larray3[1]
没有在任何地方被捕获。
您可以用不同的方式解决这个问题。我个人认为两个数组的设计从一开始就是错误的。我不会将成对的数据(名称和代码)分成两个不同的数组。
而是制作一个对象数组,然后传递单个数组:
在data.js中:
rows.forEach(function(row) {
larray1.push({
name: row.CountryName,
code: row.CountryCode
});
})
return done(larray1);
在view.js中:
opt.textContent = loc.name;
opt.value = loc.code;
旁注:在分配纯文本时,.textContent
优于 .innerHTML
。