有人能帮我解决这个问题吗?给定一个对象数组,我们需要根据段将重复和非重复数组中的对象拆分为独立数组。例如-
[{名称:"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);