javascript - 将给定数组中重复出现的元素和唯一元素分离为两个包含唯一元素和重复元素的新数组
问题描述
有人可以帮助我解决这个问题吗?给定一个对象数组,我们需要将数组中的对象根据分段重复和不重复分割成一个独立的数组。 例如——
[ {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]}]]
- 上面的示例用于根据相同段的出现次数重复给定数组中的对象。
- 重复元素必须在嵌套数组中。
解决方案
所以你想根据段道具分离数组吗?
注意:这不是性能优化的解决方案,但对于小型阵列,这应该没问题。
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);
推荐阅读
- java - 更改可执行 JAR 的日志级别
- java - 无法从 .class 读取注释
- sql-server - 启用文件流 SQL Server 2017
- material-ui - Material-UI 中带有内容的工具提示
- android - 如何减少 Android 菜单响应延迟?
- c - 解释指针和多维数组如何在 C 中工作
- git - 警告: die() 被调用了很多次。递归错误或活泼的线程死亡!(git init --bare 在谷歌驱动器上)
- c# - 实体框架 Context.Set
抛出错误“实体类型'ClassName'不是当前上下文模型的一部分” - python - 如何从我的方程中提取系数:x^3 - 60x^2 + 1100x - 6000 / -6000?
- nginx - Kubernetes 入口 - AKS