javascript - 获取对象数组中的重复项
问题描述
我有对象数组。
let coordinates = [
{ x: 8, y: 1 },
{ x: 8, y: 3 },
{ x: 6, y: 5 },
{ x: 4, y: 6 },
{ x: 3, y: 7 },
{ x: 6, y: 5 },
{ x: 3, y: 3 },
{ x: 1, y: 4 },
{ x: 3, y: 3 }
]
我偶然发现了这个博客和这个stackoverflow问题,但它只能让我根据一个属性找到重复项,但我想基于这样的属性获取重复的x
对象y
:
[
{ x: 6, y: 5 },
{ x: 3, y: 3 }
]
解决方案
我们应用过滤器来检查索引的唯一性,如果元素重复,它将计算初始索引并过滤掉当前索引。
var coordinates = [ { x: 8, y: 1 }, { x: 6, y: 5 }, { x: 4, y: 6 }, { x: 3, y: 7 }, { x: 6, y: 5 }, { x: 3, y: 3 }, { x: 1, y: 4 }, { x: 3, y: 3 }];
var result = coordinates.filter((val, i, self)=>self.findIndex(k=>k.x==val.x && k.y == val.y)!=i);
console.log(result)
更新
coordinates = [ { x: 6, y: 5 }, { x: 6, y: 5 }, { x: 6, y: 5 },{ x: 4, y: 6 }, { x: 3, y: 7 }, { x: 6, y: 5 }, { x: 3, y: 3 }, { x: 3, y: 3 }, { x: 1, y: 4 }, { x: 3, y: 3 },{ x: 6, y: 5 }];
result = coordinates.reduce((acc, elem)=>{
key = Object.values(elem).join('|');
acc.unique[key] = acc.unique[key] || [];
acc.unique[key].length >0 ? acc.duplicate[key] = elem : acc.unique[key].push(elem);
return acc;
},{unique:{},duplicate:{}});
duplicate = Object.values(result.duplicate);
unique = Object.values(result.unique);
console.log(duplicate);
console.log(unique);
推荐阅读
- docker - 容器如何部署在云中?裸机服务器还是虚拟机?
- python - Django 不接受空白字段有什么原因吗?
- dart - 如何实现应用程序屏幕的定期重新渲染
- coldfusion - 是否可以更新 Mura 搜索栏表单中的文本
- linux - How to check environment variable in a linux subshell?
- python - (Python) 使用 numpy.genfromtxt 用数据填充列表(不同的数据类型)
- vue.js - 在 VueJS (vuex) 中按需获取数据
- javascript - 如何在闪亮的某些单元格中创建带有空格的矩阵状复选框组?
- r - 堆叠循环计算大型数据集的选择列的平均值
- javascript - 我们如何在 JavaScript 中找到文件中的不同单词?