创建重复js的数组

时间:2017-08-15 10:49:20

标签: javascript arrays

例如:我的数组看起来像这样:

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"
    }]
]

同样,它不是关于重复,而是关于创建包含重复项的新数组。

2 个答案:

答案 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”:}添加到数组中(命名是任意的)。