在JS中访问嵌套数组元素

时间:2016-01-18 17:14:27

标签: javascript arrays

我有阵列:

aFrmsTbFields.push(["e7" , ["aaa", "bbb", "ccc"]]);
aFrmsTbFields.push(["e8", ["ddd", "eee", "fff"]]);
aFrmsTbFields.push(["e9", ["xxx", "yyy"]]);

我想通过["xxx", "yyy"]标识符获取e9数组。

我如何在JavaScript中完成它?

我试过了:

aXXXYYY = aFrmsTbFields["e9"];

但它不起作用。我已经知道JS中的数组与PHP中的数组有点不同。

我可以创建对象,但我担心我在Javascript中处理它们太糟糕了。我经常使用array.forEach(),我需要稍后运行这样的事情:

aXXXYYY.forEach(...) // loop on ["xxx", "yyy"] array

2 个答案:

答案 0 :(得分:3)

filter对象上使用Array方法:

aFrmsTbFields.filter(function(arr) { return arr[0] === 'e9' })[0][1]

你甚至可以将它包装成一个函数:

var findByFirst = function(arrayOfArrays, item) {
    return arrayOfArrays.filter(function(a) { return a[0] === item; })[0][1];
};

它是如何工作的,第一个过滤器只返回谓词返回true的数组元素,在我们的情况下,数组中有' e9'作为第0个元素。 然后我们在我们的案例['eq', ["foo", "bar"]]中得到这些数组中的第一个(我们在这里只预测一个)然后我们使用[1]索引访问该数组的第二个元素,这将是["foo", "bar"]

正如其他答案所暗示的那样,对象在这里会更有用:

var obj = { 
  'e1': ['a', 'b'],
  // ... 
};

obj['e1'] // returns ['a', 'b']

感谢Rick Hitchcock发现错误。

答案 1 :(得分:2)

我很确定你想使用object

aFrmsTbFields.e9 = ['xxx', 'yyy'];
console.log(aFrmsTbFields.e9);

编辑:在某种语言中没有“太糟糕”的东西。只是意味着你需要学习更多东西。如果您绝对需要遍历对象,则可以使用for..in循环。

for (var fieldName in aFrmsTbFields) {
  // fieldName == e7 or e8 or e9 etc.
  var array = aFrmsTbFields[fieldName]; // ['xxx', 'yyy'];
}