如何在Javascript中获取子数组的所有子级

如何在Javascript中获取子数组的所有子级,javascript,arrays,Javascript,Arrays,所以我的问题是: 这就是我的数组的样子,我在这里展示了它的一个片段(从控制台窗口) 这是基本的,对吧?除了索引。如您所见,第一个值为“1”,第二个值为“4”。至于它的子数组,它们也有自定义索引 因此,老式的: for(i=0; i<array.length; i++){ someVar = array[i]; //do something } 要使其更实用,请执行以下操作: 所以我知道第一个数组有索引1。如何在不知道其索引为的情况下获取cat1和cat2的值(例如,这也可能是6

所以我的问题是:

这就是我的数组的样子,我在这里展示了它的一个片段(从控制台窗口)

这是基本的,对吧?除了索引。如您所见,第一个值为
“1”
,第二个值为
“4”
。至于它的子数组,它们也有自定义索引

因此,老式的:

for(i=0; i<array.length; i++){
  someVar = array[i];
  //do something
}
要使其更实用,请执行以下操作: 所以我知道第一个数组有
索引1
。如何在不知道其索引为
的情况下获取
cat1
cat2
的值(例如,这也可能是
6
42
)。在本例中,第一个阵列只有一个子阵列,但我希望它可以用于多个子阵列。(要澄清,请从第二级子阵列中选择
cat1
cat2
,在本例中为索引2

提前感谢,感谢您的帮助


Evoc

那些不是数组。你有

[   {   "1": { etc...
它是一个数组,包含一个包含多个其他对象的对象。您不能真正使用
for(i=…)
循环来实现这一点,因为您的键不是按顺序排列的。您应该为…使用
。。。改为在
循环中:

arr = [{"1":{....}}];

for (i in arr[0]) {
   for (j in arr[0][i]) {
       console.log(arr[0][i][j]['msg']);
   }
}

那些不是数组。你有

[   {   "1": { etc...
它是一个数组,包含一个包含多个其他对象的对象。您不能真正使用
for(i=…)
循环来实现这一点,因为您的键不是按顺序排列的。您应该为…使用
。。。改为在
循环中:

arr = [{"1":{....}}];

for (i in arr[0]) {
   for (j in arr[0][i]) {
       console.log(arr[0][i][j]['msg']);
   }
}

使用
Object.getOwnPropertyNames
首先获取按整数索引排序的属性,从最小到最大。迭代它们以获得
msg1

var数组={“1”:{“3”:{“5”:{“数据”:“someData”,“moreData”:“someMoreData”},“msg1”:“hello world”,“msg2”:“foo equals bar”},“5”:{“8”:{“data”:“someData”,“moreData”:“someMoreData”},“msg1”:“world hello”,“msg2”:“bar equals foo”},“你的名字”:“jimmy”,“你的消息”:“hello world”},“4”:{“3”:“5”:“data”:“someData”:“someData”,“moreData”:“someMoreData”“你好,世界”,“msg2”:“foo等于bar”},“5”:{“8”:{“data”:“someData”,“moreData”:“someMoreData”},“msg1”:“世界你好”,“msg2”:“bar等于foo”},“你的名字”:“比利”,“你的msg”:“foo等于bar”};
for(对象的let键。getOwnPropertyNames(数组[1])){
if(对象(数组[1][key])!==数组[1][key])中断;
log('msg1 of“'+key+”:'+array[1][key].msg1);
}

console.log('your_-msg:'+array[1].your_-msg);
使用
Object.getOwnPropertyNames
首先获取按整数索引排序的属性,从最小到最大。迭代它们以获取
msg1

var数组={“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”},“你的名字”:“jimmy”,“你的消息”:“hello world”},“4”:{“3”:“5”:“data”:“someedata“你好,世界”,“msg2”:“foo等于bar”},“5”:{“8”:{“data”:“someData”,“moreData”:“someMoreData”},“msg1”:“世界你好”,“msg2”:“bar等于foo”},“你的名字”:“比利”,“你的msg”:“foo等于bar”};
for(对象的let键。getOwnPropertyNames(数组[1])){
if(对象(数组[1][key])!==数组[1][key])中断;
log('msg1 of“'+key+”:'+array[1][key].msg1);
}

console.log('your_-msg:'+array[1].your_-msg);
您显示的示例是一个只有一个索引的数组,在这个索引中有嵌套的对象,您可以使用属性迭代器(foreach)迭代它们。您必须转到第二级tho,因为您需要的值在那里

for (var key in object) {
    for(var anotherKey in object[key]) {
        //check for undefined 
        if(object[key][anotherKey].hasOwnProperty('msg')) {
            //code
        }

    }
}
{}-声明对象(文字)


[]-声明数组

您展示的示例是一个只有一个索引的数组,在这个索引中有嵌套的对象,您可以使用属性迭代器(foreach)对它们进行迭代。您必须转到第二级tho,因为您需要的值就在那里

for (var key in object) {
    for(var anotherKey in object[key]) {
        //check for undefined 
        if(object[key][anotherKey].hasOwnProperty('msg')) {
            //code
        }

    }
}
{}-声明对象(文字)


[]-声明数组

“这可能不太正确,因为我只是把这个作为示例,但我希望您可以使用它”不太正确。在JavaScript中,您使用
[entry0,entry1,entry2]
定义数组(例如
[1,2,3]
[“a”,“b”,“c”]
[1,“b”,32.4]
等)使用
{key1:value1,key2:value2}定义对象
。因此,请使用正确的数组与对象表示法更新您的问题;否则,人们将不得不猜测。请添加带有键的数组。您说过您只需要第二级中的非数字属性,对吗?那么
msg1
处于第三级,那么您到底在寻找什么?看起来像一个带有
length=1
带有嵌套属性。好吧,我会完全更新我的问题,很抱歉给您带来不便“这可能不太正确,因为我只是为示例制作了这一个,但我希望您可以使用它”不是真的。在JavaScript中,您使用
[entry0,entry1,entry2]
(例如,
[1,2,3]
[“a”、“b”、“c”]
[1,“b”、32.4]
等)使用
{key1:value1,key2:value2}定义对象
。因此,请使用正确的数组与对象表示法更新您的问题;否则,人们将不得不猜测。请添加带有键的数组。您说过您只需要第二级中的非数字属性,对吗?那么
msg1
处于第三级,那么您到底在寻找什么?看起来像一个带有
length=1
具有嵌套属性。好吧,我将完全更新我的问题,很抱歉给您带来不便。从技术上讲,他确实有一个数组,尽管可能不打算以那种方式使用。请注意
,因为in
不保证任何迭代顺序。谢谢@marc,我确实弄错了数组…我的错了,我很抱歉这是我的节目