2017-07-28 6 views
0

オブジェクトを持つ配列があり、各オブジェクトには一意のIDがあります。私はIDに基づいてこれらのオブジェクトを分離し、同じIDを持つオブジェクトを含む新しい配列を作成する必要があります。その後あなたは、私が最初に任意の重複(uniqueIdArr)を取り出し、その後、IDを持つ配列を作成した後、オブジェクトの配列をマッピングされた見ることができるようにこれは私がこれまで持っているもの。..配列内のオブジェクトを区切り、IDごとに新しい配列のidでソート

let fullArray = [{ 
    name: 'John', 
    id: 1 
}, { 
    name: 'Lucy', 
    id: 1 
}, { 
    name: 'Tyler', 
    id: 2 
}]; 

function separateObjectsInArray(fullArray) { 

    let newArr = []; 

    fullArray.map((each) => { 

    newArr.push(each.id); 

    }); 

    let uniqueIdArr = [...new Set(newArr)]; 

    fullArray.map((eachObj) => { 

    uniqueArr.map((uniqueId) => { 

     if (eachObj.id === uniqueId) { 
     //CREATE NEW ARRAYS WITH MATCHING ID'S 

     } 

    }) 

    }) 

} 

separateObjectsInArray(fullArray); 

ある

私は再びfullArrayをマッピングし、各オブジェクトのIDをIDのuniqueIdArrと比較しています。私は各IDの配列を作成し、一致するオブジェクトをプッシュする方法を教えています。

let finalArray1 = [{ 
    name: 'John', 
    id: 1 
}, { 
    name: 'Lucy', 
    id: 1 
}]; 

let finalArray2 = [{ 
    name: 'Tyler', 
    id: 2 
}]; 

また、配列を使用した1つの配列でも問題ありません。

let finalArray = [[{name: 'Tyler', id: 2 }], [{ name: 'John', id: 1},{ 
name: 'Lucy', id: 1 }]]; 
+0

sortedArr = finalArray.sort(function(a、b){return b.id-a.id}); – ControlAltDel

+2

*オブジェクトを持つ配列があり、各オブジェクトに一意のID *が付いています。* IDが同じオブジェクトを含む新しい配列を作成します。 – tymeJV

答えて

3

あなたはidをキーマップを構築し、最終的にその配列のうち値が配列の新しいアレイを形成するために取得するためにreduceを使用することができます。

function group(arr, key) { 
 
    return [...arr.reduce((acc, o) => 
 
     acc.set(o[key], (acc.get(o[key]) || []).concat(o)) 
 
    , new Map).values()]; 
 
} 
 

 
const fullArray = [{ 
 
    name: 'John', 
 
    id: 1 
 
}, { 
 
    name: 'Lucy', 
 
    id: 1 
 
}, { 
 
    name: 'Tyler', 
 
    id: 2 
 
}]; 
 

 
const result = group(fullArray, 'id'); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

の場合lodashを使用できますが、ここでは別の解決策があります。

let fullArray = [ 
 
    { name: 'John', id: 1 }, 
 
    { name: 'Sarah', id: 2 }, 
 
    { name: 'Lucy', id: 1 }, 
 
    { name: 'Tyler', id: 2 }]; 
 

 
const grouped = _.groupBy(fullArray, "id"); 
 
console.log(Object.keys(grouped).map((key) => grouped[key]));
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>

この情報がお役に立てば幸いです。

関連する問題