Misalnya: Saya memiliki array yang terlihat seperti ini:

let arr = [{
    name: "Peter"
}, {
    name: "Peter"
}, {
    name: "John"
}, {
    name: "Peter"
}, {
    name: "Sarah"
}, {
    name: "John"
}]

Saya perlu membuat array, yang akan terlihat seperti ini:

let dupArray = [
    [{
        name: "Peter"
    }, {
        name: "Peter"
    }, {
        name: "Peter"
    }],
    [{
        name: "John"
    }, {
        name: "John"
    }],
    [{
        name: "Sarah"
    }]
]

Sekali lagi, ini bukan tentang menggandakan, ini tentang membuat array baru dengan duplikat yang dikelompokkan.

0
jusinejo 15 Agustus 2017, 13:49

2 jawaban

Jawaban Terbaik

Kurangi mereka menjadi Peta dan dapatkan nilainya():

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);
3
baao 15 Agustus 2017, 11:10
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>

Pada bagian pertama fungsi grup semuanya akan dikelompokkan dengan menghitung. Dan setelah itu representasi yang Anda inginkan akan dihasilkan. Dengan hanya menambahkan {"name" : } ke array sesuai dengan jumlah di dalam array swap (penamaannya arbitrer).

0
sascha10000 15 Agustus 2017, 11:09