我有阵列:
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
答案 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'];
}