所以这是我的问题:
所以这就是我的数组的样子,我在这里展示了它的一个片段(来自控制台窗口)。
这总体上非常基本吗?除了它的索引。如您所见,第一个值为"1"
,让第二个值为"4"
。至于它的子阵列,它们也有自定义索引。
因此,老式的:
for(i=0; i<array.length; i++){
someVar = array[i];
//do something
}
无效。
我通过迭代另一个数组得到1或4,所以不需要得到那些。
我想得到所有的subArrays(不是进一步嵌套的subArrays,只有第二级)。
基本上我想要的是这样的东西(有这样的东西吗?):
array[someIndex].children.forEach(
//do something with **this**
)
让它更实用:
所以我知道第一个数组有index 1
。如何在不知道cat1
cat2
的情况下获取index 2
和6
的值(例如,这也可以是42
或cat1
)。在这种情况下,第一个数组只有一个subArray,但我想让它适用于多个subArrays。 (澄清一下,从二级子阵列中选择cat2
,index 2
,在本例中为{{1}})
在此先感谢,任何帮助表示赞赏!
研祥
答案 0 :(得分:2)
那些不是数组。
[ { "1": { etc...
这是一个包含一个包含多个其他对象的对象的数组。您无法真正使用for(i=...)
循环,因为您的密钥不是连续的。您应该使用for ... in
循环代替:
arr = [{"1":{....}}];
for (i in arr[0]) {
for (j in arr[0][i]) {
console.log(arr[0][i][j]['msg']);
}
}
答案 1 :(得分:1)
使用Object.getOwnPropertyNames
获取首先使用整数索引排序的属性,从最小到最大。迭代它们以获得msg1
。
var array = {"1":{"3":{"5":{"data":"someData","moreData":"someMoreData"},"msg1":"hello world","msg2":"foo equals bar"},"5":{"8":{"data":"someData","moreData":"someMoreData"},"msg1":"world hello","msg2":"bar equals foo"},"your_name":"jimmy","your_msg":"hello world"},"4":{"3":{"5":{"data":"someData","moreData":"someMoreData"},"msg1":"hello world","msg2":"foo equals bar"},"5":{"8":{"data":"someData","moreData":"someMoreData"},"msg1":"world hello","msg2":"bar equals foo"},"your_name":"billy","your_msg":"foo equals bar"}};
for(let key of Object.getOwnPropertyNames(array[1])) {
if(Object(array[1][key]) !== array[1][key]) break;
console.log('msg1 of "'+key+'": ' + array[1][key].msg1);
}
console.log('your_msg: ' + array[1].your_msg);
答案 2 :(得分:0)
您展示的示例是一个只有一个索引的数组,在此索引中有嵌套对象,您可以使用属性迭代器(foreach)迭代它们。你必须进入二级,因为你需要的值就在那里。
for (var key in object) {
for(var anotherKey in object[key]) {
//check for undefined
if(object[key][anotherKey].hasOwnProperty('msg')) {
//code
}
}
}
{} - 声明对象(文字)
[] - 声明数组