计算数组内对象内的数组长度

时间:2016-05-25 09:16:05

标签: javascript arrays object

我在创建一个引用数组中对象内的数组的循环时遇到了麻烦。

   var data_dictionary = [{
    "category": "Food",
    "items": [
        {
            "object": "Apple",
            "price": 2.21

        },
        {
            "object": "Banana",
            "price": 1.12
        }
     ]
  }, {
   "category":  "Goods",
   "items":  [
        {
            "object":  "Lawnmower",
            "price":   25.55
        },
        {
            "object":  "Bicycle",
            "price":   12.21
        }
     ]
  }
]

我想运行一个循环来返回“对象”#,但我遇到了问题

var result =[] 
var temp = []
  for (var i=0; i < data_dictionary.length; i++) {
        for (var c=0; c < data_dictionary[i].items.length; c++) {
          temp.push (data_dictionary[i].items[c].object)
        }
      }
      result.push (temp.length)

问题与计算“c&lt; data_dictionary [i] .items.length”中的长度有关,也可能在下一行中。

理想情况下,我希望结果为4,因为有4个对象。

感谢阅读。

4 个答案:

答案 0 :(得分:1)

您的数据和代码应该是

var data_dictionary = [{
    "category": "Food",
    "items": [
        {
            "object": "Apple",
            "price": 2.21

        },
        {
            "object": "Banana",
            "price": 1.12
        }
     ]
  }, {
   "category":  "Goods",
   "items":  [
        {
            "object":  "Lawnmower",
            "price":   25.55
        },
        {
            "object":  "Bicycle",
            "price":   12.21
        }
     ]
  }
]

var result;
var temp = [];
for (var i=0; i < data_dictionary.length; i++) {
    for (var c=0; c < data_dictionary[i].items.length; c++) {
      temp.push (data_dictionary[i].items[c].object)
    }
}
result = temp.length

答案 1 :(得分:0)

使用适当的数据结构(缺少一个}, {,以及一些字符串未终止),您可以构建一个数组或只计算出现的数据。

&#13;
&#13;
var data_dictionary = [{ "category": "Food", "items": [{ "object": "Apple", "price": 2.21 }, { "object": "Banana", "price": 1.12, }] }, { "category": "Goods", "items": [{ "object": "Lawnmower", "price": 25.55 }, { "object": "Bicycle", "price": 12.21 }] }],
    result = [];

data_dictionary.forEach(function (a) {
    a.items.forEach(function (b) {
        result.push(b.object);
    });
});

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
&#13;
&#13;
&#13;

答案 2 :(得分:0)

如果我理解正确,你希望输出为内部数组长度的数组。

首先,您应该正确格式化数据才有效, 然后你可以使用.filter()函数迭代它,例如:

var data_dictionary = [ {
    "category": "Food",
    "items": [
        {
            "object": "Apple",
            "price": '​2.21'
        },
        {
            "object": "Banana",
            "price": '1.12'
        }
     ]
  },
  {
   "category":  "Goods",
   "items":  [
        {
            "object":  "Lawnmower",
            "price":   '25.55'
        },
        {
            "object":  "Bicycle",
            "price":   '12.21'
        }
     ]
  }];


var result = data_dictionary.map(function(n) {
  return n.items.length;
})

console.log(result);

答案 3 :(得分:0)

在你的代码中缺少}和{,创建如下的单独对象。

var data_dictionary = [{"category":"Food",
 "items":[
 {"object":"Apple",
  "price":"​2.21"
 },
 {"object":"Banana",
 "price":"1.12"
 }
 ]},

{"category":"Goods",
 "items":[{
  "object":"Lawnmower",
 "price":"25.55"
 },     
{
"object":"Bicycle",
"price":"12.21"
}]
}]
var $data_dictionary = $(data_dictionary);

您可以使用jQuery编写简单的代码。

var result = []; 
$data_dictionary.each(function(index,elt){
$(elt.items).each(function(itemIndex, itemElt){
 result.push(itemElt);
});});   

这里你将获得4个对象