例如:我的数组看起来像这样:
let arr = [{
name: "Peter"
}, {
name: "Peter"
}, {
name: "John"
}, {
name: "Peter"
}, {
name: "Sarah"
}, {
name: "John"
}]
我需要创建数组,看起来像这样:
let dupArray = [
[{
name: "Peter"
}, {
name: "Peter"
}, {
name: "Peter"
}],
[{
name: "John"
}, {
name: "John"
}],
[{
name: "Sarah"
}]
]
同样,它不是关于重复,而是关于创建包含重复项的新数组。
答案 0 :(得分:2)
将它们缩减为Map并获取值():
let arr = [{
name: "Peter"
}, {
name: "Peter"
}, {
name: "John"
}, {
name: "Peter"
}, {
name: "Sarah"
}, {
name: "John"
}];
let dupArr =
[...arr.reduce((a,b) =>
a.set(b.name , (a.get(b.name) || []).concat(b)),
new Map()).values()];
console.log(dupArr);
答案 1 :(得分:0)
var arr = [{name: "Peter"},{name: "Peter"},{name: "John"},{name: "Peter"},{name: "Sarah"},{name: "John"}]
var group = function(ar){
// counts the element per group
var swap = {};
for(a of ar){
if(swap[a.name] !== undefined){
swap[a.name] = swap[a.name] + 1;
}
else {
swap[a.name] = 1;
}
}
// here you could sort alphabetically
// creates your wanted format
var target = [];
for(s in swap){
var len = swap[s];
var subArray = [];
for(var i = 0; i < len; i++){
subArray.push({ "name" : s });
}
target.push(subArray);
}
return target;
}
document.getElementById("content").innerHTML = JSON.stringify(group(arr));
<pre id="content"></pre>
在小组函数的第一部分中,整个事物将通过计数进行分组。然后你的愿望代表将被生成。只需根据交换数组中的计数将{“name”:}添加到数组中(命名是任意的)。