将重复出现的元素和唯一元素从给定数组中分离为两个包含唯一元素和重复元素的新数组



有人能帮我解决这个问题吗?给定一个对象数组,我们需要根据将重复和非重复数组中的对象拆分为独立数组例如-

[{名称:"abc",id:1,段:[1,2]},{姓名:"abc1",id:2,段:[1]},{名称:"abc3",id:3,段:[1,2]},{名称:"abc2",id:4,段:[1,2,3]}]

所需的结果数组如下-

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

  • 以上示例适用于给定数组中的非重复对象

repeatedEle=[[{名称:"abc",id:1,段:[1,2]},{名称:"abc3",id:3,段:[1,2]}]]

  • 以上示例用于根据相同段的出现次数在给定数组中重复对象
  • 重复的元素必须在嵌套数组

那么您想根据分段道具来分离数组吗?

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

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);

最新更新