使用javascript将数组中的数组对象分组

时间:2018-08-01 20:20:16

标签: javascript jquery ecmascript-6

我有两个数组:

const array1 = [
  {
    pageNum: 3,
    name: 'Nine',
  },
  {
    pageNum: 1,
    name: 'One',
  },
  {
    pageNum: 1,
    name: 'Two',
  },
  {
    pageNum: 3,
    name: 'Eleven',  
  }, 
  {
    pageNum: 1,
    name: 'Three',  
  },
  {
    pageNum: 1,
    name: 'Four',
  },
];

const array2 = [
  {
    pageNum: 2,
    name: 'Five',
  },
  {
    pageNum: 3,
    name: 'Twelve',
  },  
  {
    pageNum: 2,
    name: 'Six',
  },
  {
    pageNum: 2,
    name: 'Seven',  
  },
  {
    pageNum: 3,
    name: 'Ten',
  }, 
  {
    pageNum: 2,
    name: 'Eight',
  },
];

第三个预期数组:

[ 
  { pageNum: 1, name: 'One' },
  { pageNum: 1, name: 'Two' },
  { pageNum: 1, name: 'Three' },
  { pageNum: 1, name: 'Four' },
  { pageNum: 2, name: 'Eight' }
  { pageNum: 2, name: 'Five' },
  { pageNum: 2, name: 'Six' },
  { pageNum: 2, name: 'Seven' }
  { pageNum: 3, name: 'Twelve' },
  { pageNum: 3, name: 'Eleven' },
  { pageNum: 3, name: 'Ten' },
  { pageNum: 3, name: 'Nine' },
   ]

不确定我们可以通过缩短对象来做到这一点,这是最好的方法。

在合并两个数组后,我试图使对象值相同的组。

使用javascript实施的最佳方法是什么?

这是我尝试过的:

let mergeArray = array1.concat(array2);
console.log(mergeArray)

let groups = {};


  for( var i= 0; i< mergeArray.length; i++){
    var groupName = mergeArray[i].group;
    var key = Object.values(mergeArray);
    if(!groups[groupName]){
      groups[groupName] = [];
    }
    groups[groupName].push(mergeArray[i].pageNum, key);

  }

mergeArray = [];

for(let groupName in groups){
//   console.log("FRR",groups);
  mergeArray.push({ pageNum: groups[groupName]})
}

console.log(mergeArray)

我也尝试了prototype.reduce()函数。请给我最好的方法。

1 个答案:

答案 0 :(得分:0)

看来简单的sort是您问题的解决方案。

const array1 = [{
    pageNum: 3,
    name: 'Nine',
  },
  {
    pageNum: 1,
    name: 'One',
  },
  {
    pageNum: 1,
    name: 'Two',
  },
  {
    pageNum: 3,
    name: 'Eleven',
  },
  {
    pageNum: 1,
    name: 'Three',
  },
  {
    pageNum: 1,
    name: 'Four',
  },
];

const array2 = [{
    pageNum: 2,
    name: 'Five',
  },
  {
    pageNum: 3,
    name: 'Twelve',
  },
  {
    pageNum: 2,
    name: 'Six',
  },
  {
    pageNum: 2,
    name: 'Seven',
  },
  {
    pageNum: 3,
    name: 'Ten',
  },
  {
    pageNum: 2,
    name: 'Eight',
  },
];

let mergeArray = array1.concat(array2);
let results = mergeArray.sort(function(a, b){
  return a.pageNum - b.pageNum;
});
console.log(results);