如何在Javascript中获取subArray的所有子项

时间:2016-08-29 17:19:25

标签: javascript arrays

所以这是我的问题:

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

Array

这总体上非常基本吗?除了它的索引。如您所见,第一个值为"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 26的值(例如,这也可以是42cat1)。在这种情况下,第一个数组只有一个subArray,但我想让它适用于多个subArrays。 (澄清一下,从二级子阵列中选择cat2index 2,在本例中为{{1}})

在此先感谢,任何帮助表示赞赏!

研祥

3 个答案:

答案 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
        }

    }
}

{} - 声明对象(文字)

[] - 声明数组