从 JavaScript 中的多维数组中获取数组值

Posted

技术标签:

【中文标题】从 JavaScript 中的多维数组中获取数组值【英文标题】:Getting array values from multidimensional array in JavaScript 【发布时间】:2016-08-29 20:21:39 【问题描述】:

我需要一些小的帮助。我无法让一个填充了其他两个数组对象(larray1 和 larray2)的数组(larray3)从 data.js 传递到后续的 model.js 和 view.js。 Data.js 正确构建了多维数组,但是当在 model.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);
)

【问题讨论】:

【参考方案1】:

在 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

【讨论】:

谢谢。我曾尝试过类似于键值配对的方法,但我知道我没有正确实施。这很好用。我也会考虑.textcontent。非常感谢您的帮助!

以上是关于从 JavaScript 中的多维数组中获取数组值的主要内容,如果未能解决你的问题,请参考以下文章

在多维数组javascript或coffeescript中获取最大值

将一个数组值与另一个多维数组匹配,然后从多维数组中获取值

在 laravel 5.4 刀片中通过键从多维数组中获取值

使用php从多维数组中获取子数组

markdown 从多维数组中获取数组值

从多维数组中获取值