首页 > 解决方案 > 将给定数组中重复出现的元素和唯一元素分离为两个包含唯一元素和重复元素的新数组

问题描述

有人可以帮助我解决这个问题吗?给定一个对象数组,我们需要将数组中的对象根据分段重复和不重复分割成一个独立的数组例如——

[ {name:"abc",id:1,segments:[1,2]}, {name:"abc1",id:2,segments:[1]}, {name:"abc3",id:3,段:[1,2]},{名称:“abc2”,id:4,段:[1,2,3]}]

所需的结果数组如下 -

uniqueArr = [{ name:"abc1",id:2,segments:[1]},{ name:"abc2",id:4,segments:[1,2,3]}]

重复Ele = [[{ name:"abc",id:1,segments:[1,2]},{ name:"abc3",id:3,segments:[1,2]}]]

标签: javascriptarraysalgorithmobjectdata-structures

解决方案


所以你想根据段道具分离数组吗?

注意:这不是性能优化的解决方案,但对于小型阵列,这应该没问题。

const data = [
  {name:"abc",id:1,segments:[1,2]},
  {name:"abc1",id:2,segments:[1]},
  {name:"abc3",id:3,segments:[1,2]},
  {name:"abc2",id:4,segments:[1,2,3]},
];

const uniqueData = data.filter((entry, idx, originalArray) => {
  const copyArray = [...originalArray];
  copyArray.splice(idx, 1);
  
  return !copyArray.some((element) => entry.segments.sort().join() === element.segments.sort().join());
});

const nonUniqueData = data.filter((entry) => !uniqueData.includes(entry));

console.log({uniqueData, nonUniqueData});

这是另一个解决方案。

const data = [
  {name:"abc",id:1,segments:[1,2]},
  {name:"abc1",id:2,segments:[1]},
  {name:"abc3",id:3,segments:[1,2]},
  {name:"abc2",id:4,segments:[1,2,3]},
];

const segmentedData = data.reduce((acc, entry, idx, src) => {

  const copyArray = [...src];
  copyArray.splice(idx, 1);
  
  const key = copyArray.some((element) => entry.segments.sort().join() === element.segments.sort().join()) ? 'nonunique' : 'unique';
  
  acc[key].push(entry);
  
  return acc;

}, { unique: [], nonunique: [] });

console.log(segmentedData);


推荐阅读