在JavaScript中按键添加项目到数组

时间:2015-07-24 03:40:41

标签: javascript arrays object

我需要对具有相同name属性的项进行分组,并增加其number。我尝试分配给新数组并按键检查现有项目。当我在PHP中使用此解决方案时,它工作正常,但在JavaScript中它没有。

我搜索了一些类似的问题,但我不知道为什么它不起作用。

var orgArr = [
  {name: 'abc', number: 3},
  {name: 'xyz', number: 2},
  {name: 'abc', number: 5}
];

var result = []; //work if result = {};
for (var i = 0; i < orgArr.length; i++) {
  if (!result[orgArr[i].name]) {
      result[orgArr[i].name] = orgArr[i]; //assign new
  } else {
      result[orgArr[i].name].number += orgArr[i].number; //increase number if name exist in result array
  }
}

alert(JSON.stringify(result)); //expect array 2 item but it's empty array
console.log(result); //Will have result 2 item when I view console window

4 个答案:

答案 0 :(得分:0)

var orgArr = [
  {name: 'abc', number: 3},
  {name: 'xyz', number: 2},
  {name: 'abc', number: 5}
];

var result = []; //work if result = {};
var tempArray = []; // used to store unique name to prevent complex loop
orgArr.forEach(function(item){
      if($.inArray(item.name, tempArray)< 0){// unique name
          result.push(item);
          tempArray.push(item.name);
        }
  else{
       var indexNew =  $.inArray(item.name, tempArray); 
       result[indexNew].number += item.number;
     }
  });

alert(JSON.stringify(result)); //expect array 2 item but it's empty array
console.log(result); //Will have result 2 item when I view console window
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 1 :(得分:-1)

E /我之前的回答不正确。

嗯..是的......

[]表示一个数组。数组按整数值保存所有内容。你试图为它提供一个字符串值(orgArr [x] .name),因为它只是一个数组,所以它将它作为一个糟糕的调用丢弃。

{}是一个对象。对象可以有字符串索引。

var result = []; //work if result = {}; 

为什么不能成为{}?

答案 2 :(得分:-1)

如果您希望它起作用,请将结果= {}而不是[]

数组不是键值存储。它仍将采用键值,并将它们存储在数组对象上。但是当stringify遇到你的数组时,它确定它是一个数组,然后trys迭代数组,你的数组显示为空。所以你的输出中没有任何东西。

答案 3 :(得分:-1)

你得到空数组,因为默认情况下JSON.stringify无法将你的数组转换为json字符串。

默认情况下,JSON.stringify将基于int的索引数组转换为json字符串,但您使用的是orgArr [i] .name,它是一个字符串作为数组索引,因为alert()显示空数组。

你能解释为什么要将json数组转换为带有字符串索引的数组。如果你想要一个字符串作为键/索引,那么使用json数组总是更好。

有关JSON.stringify

的详细信息