操作数组删除重复对象并将其总量可达
我将如何采取以下数组中的JavaScript操作数组删除重复对象并将其总量可达
locationList = [{
id: 1,
title: "Loughborough"
}, {
id: 5,
title: "Corby"
}, {
id: 2,
title: "Derby"
}, {
id: 2,
title: "Derby"
}, {
id: 2,
title: "Derby"
}];
并将其转换成类似这样:
locationList = [{
id: 1
title: "Loughborough",
count: 1
}, {
id: 5
title: "Corby",
count: 1
}, {
id: 2
title: "Derby",
count: 3
}];
,其中所有的冠军总计。
许多解决方案之一:
var newl = [];
locationList.forEach(function(o) {
if (newl[o.id] == undefined) {
o.count = 1;
newl[o.id] = o;
} else {
newl[o.id].count += 1;
}
});
// if you want a trimmed array (with length = 3)
var trimedArray = newl.filter(function(n){ return n != undefined });
谢谢。我试过这个代码,它工作得很好,所以我选择它作为正确的答案。然而,最后它告诉我数组的长度是6,当它应该是3.你知道为什么会发生这种情况吗?我认为它在这个过程中创建了一些空的数组元素。 – methuselah
下面是截图:http://imgur.com/cSARF44 – methuselah
这是因为id实际上是一个整数。 js运行时认为'newl'是一个常规数组...你最终得到一个最大数组+ 1的数组。修剪数组,你可以使用:var trimedArray = newl.filter(function(n){return n!= undefined});' – Derlin
循环遍历元素,创建一个新的阵列,把一个元素到新数组如果该元素尚未
编辑: 否则,如果它存在,只是在加1计数新数组,然后使用新数组而不是旧数组。
正如我在评论中说:
创建新的数组,遍历每个元素,如果element.title不在新的数组,添加到阵列中,如果是在添加特定索引
和你试过什么?这听起来像是我们的作业:) – daremachine
创建新的数组,循环遍历每个元素,如果element.title不在数组中,则添加到数组,如果它是并且在特定索引中计数。本来以为这会很容易,像你这样的代表:/ – thatOneGuy
我一直在看array.reduce函数,但我只是想要另一个意见 – methuselah