2017-08-15 2 views
0
例えば

の配列を作成します。私は、配列を作成する必要が重複JS

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

をので、明示的であることを、あなたがグループ化された重複する名前が含まれている「dupArray」という名前の第二の配列を作成したいです一緒に?カウントではなく、単にグループ化されていますか?この正確なデータは?これまでどんなコードがありますか? –

+1

@ sascha10000これは本当に配列を複製するのではなく、配列の複製をグループ化することです。 – George

+0

'dupArray = arr.sort();を試してください。アルファベット順にソートされます。 – Deckerz

答えて

2

)(地図にそれらを削減し、値を取得:

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);

+0

ありがとう、それは私が必要なものです。私はJSに新しい、この3つのドットの '... arr'はどういう意味ですか? – jusinejo

+0

@jusinejo [拡散構文](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)では、iterableを配列に変換します – baao

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":}を追加するだけです(命名は任意です)。