ES6データ構造のセットとオブジェクトの配列は、単純な再達成するためのマップ

ES6を有するデータ構造のセットので、アレイは、容易に再ラインにコードを、例えば次のようとして実装することができます

せARR = [1、2、2、3、4 ]
 関数一意(ARR){
     戻り [... 新しいセット(ARR)] 
} 
はconsole.log(ユニーク(ARR))// [1、2、3、 4]

しかし、アレイ内の項目は、もはやそのようなオブジェクトであるような単純なデータ型である場合、この方法は、以下の結果として、エラーにつながりません

LETのARR = [ 
    {名: 'A'、NUM :. 1 }、
    {名前: 'B'、NUM :. 1 }、
    {名前: 'C'、NUM :. 1 }、
    {名前: 'D'、NUM :. 1 }、
    {名前: 'A'、NUM :. 1 }、
    {名前: 'A'、NUM :. 1 }、
    {名前: 'A'、NUM :. 1 } 
] 
関数UNIQUE(ARR)は、{
     戻る ... [ 新しい新SET(ARR)] 
} 
元の配列のはconsole.log(UNIQUE(ARR))//結果、興味のあるコードをコピーしようとすることができ

オブジェクトセットデータ構造があっても2つの空のオブジェクト場合だけでなく、範囲セット構造内に、等しいと見なさないため、この理由は

これらの理由から、対象配列の重量に簡単な方法のためのパッケージのマップ構造を使用するため、次のように

// オブジェクトのES6配列属性のすべてを再スクリーニングするために、配列内の各項目の文字
機能UNIQUE(ARR){ 
    constのRES = 新新マップ()
     の戻り arr.filter(項目=>!Res.has(JSON.stringify(項目)) res.set &&(JSON.stringify(項目),. 1 ))
} 
// オブジェクトのES6一次元アレイの重量の属性値および属性の単純なデータ型の
関数UNIQUE(ARR、KEY){ 
    CONST RES = 新しい新マップ()
     の戻り arr.filter((項目)=>!res.has(項目[キー] + '')&& res.set(項目[キー] + ''、1 ))
}

次のようにオンラインの友人は、異なっ主に出て、他の違いをキー・マップ・データ構造の理解をより簡単な方法を考案していません

// オブジェクトのES6配列属性のすべての文字の配列内の各アイテムのスクリーニングを再する
機能unique2の(ARR){ 
    constのRES = 新新マップ()
     の戻り arr.filter(項目=>!Res.has(項目)&& res.set(項目,. 1 ))
}

実は、私はそれを試してみました、そして再生するために体重の何の効果も見られない、具体的な理由は、私の理解は、保存されたアイテムは、オブジェクトへのポインタである場合に、各項目を持つオブジェクトは代数基を指したときにということであるかわかりません、スタック上のアドレスは、そのアドレスのすべてのアイテムは同じデータヒープにも、彼らかかわらず、すべての点、同じオブジェクトそのものではないではないので、マップが等しいすべての項目は、当然のことながら、重複排除の効果を達成できないであろうと想定していません。 。より正確で深い理解がある場合はカザフスタンを議論することを歓迎

おすすめ

転載: www.cnblogs.com/p-l-u-m/p/10950774.html