在数组中分隔对象,并在每个id的新数组中按id排序

Ces*_*sar 0 javascript arrays object filter higher-order-functions

我有一个包含对象的数组,每个对象都有一个唯一的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);
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我首先绘制出对象数组,然后使用ids创建一个数组,然后取出任何重复项(uniqueIdArr).之后,我再次映射fullArray并将每个对象的ID与ID的uniqueIdArr进行比较.我坚持如何告诉它为每个ID创建一个数组并推送匹配的对象.

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

let finalArray2 = [{
  name: 'Tyler',
  id: 2
}];
Run Code Online (Sandbox Code Playgroud)

或者甚至一个阵列阵列也很好!

let finalArray = [[{name: 'Tyler', id: 2 }], [{ name: 'John', id: 1},{ 
name: 'Lucy', id: 1 }]];
Run Code Online (Sandbox Code Playgroud)

tri*_*cot 5

您可以使用reduce构建一个键入的Map id,最后从该数组中获取值以形成一个新的数组数组:

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);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)