操作数组删除重复对象并将其总量可达

问题描述:

我将如何采取以下数组中的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 
}]; 

,其中所有的冠军总计。

+2

和你试过什么?这听起来像是我们的作业:) – daremachine

+2

创建新的数组,循环遍历每个元素,如果element.title不在数组中,则添加到数组,如果它是并且在特定索引中计数。本来以为这会很容易,像你这样的代表:/ – thatOneGuy

+0

我一直在看array.reduce函数,但我只是想要另一个意见 – methuselah

许多解决方案之一:

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 }); 
+0

谢谢。我试过这个代码,它工作得很好,所以我选择它作为正确的答案。然而,最后它告诉我数组的长度是6,当它应该是3.你知道为什么会发生这种情况吗?我认为它在这个过程中创建了一些空的数组元素。 – methuselah

+0

下面是截图:http://imgur.com/cSARF44 – methuselah

+0

这是因为id实际上是一个整数。 js运行时认为'newl'是一个常规数组...你最终得到一个最大数组+ 1的数组。修剪数组,你可以使用:var trimedArray = newl.filter(function(n){return n!= undefined});' – Derlin

循环遍历元素,创建一个新的阵列,把一个元素到新数组如果该元素尚未

编辑: 否则,如果它存在,只是在加1计数新数组,然后使用新数组而不是旧数组。

正如我在评论中说:

创建新的数组,遍历每个元素,如果element.title不在新的数组,添加到阵列中,如果是在添加特定索引