我需要对具有相同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
答案 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数组总是更好。
的详细信息