javascript - 根据多个属性从对象数组中过滤重复项,包括原始值
问题描述
data
是一个对象列表。我们希望根据多个对象属性过滤掉所有重复项,包括原始值。
我的代码可以根据多个对象属性过滤掉重复项,但是我们如何调整它以过滤掉原始值呢?
目标是最终得到这些重复项的列表。
const data = [{
name: 'x',
latitude: '45.9',
longitude: '50.2'
}, {
name: 'y',
latitude: '45.9',
longitude: '50.2'
}, {
name: 'z',
latitude: '40.5',
longitude: '85.7'
}];
const duplicates = data
.filter((obj, index, array) =>
array.findIndex(o =>
o.latitude === obj.latitude &&
o.longitude === obj.longitude
) != index
);
console.log(duplicates);
输出:
[{
name: 'y',
latitude: '45.9',
longitude: '50.2'
}]
期望的输出:
[{
name: 'x',
latitude: '45.9',
longitude: '50.2'
}, {
name: 'y',
latitude: '45.9',
longitude: '50.2'
}]
解决方案
而不是findIndex
,您可以运行一个带有额外条件的 forloop ,即 index 不应与您正在检查的索引相同。
基于此,您可以直接从循环内部返回。
var data = [
{ name: 'x',
latitude: '45.9',
longitude: '50.2'},
{ name: 'y',
latitude: '45.9',
longitude: '50.2'},
{ name: 'z',
latitude: '40.5',
longitude: '85.7'},
];
var duplicates = data.filter((obj, index, array) => {
for(let i = 0 ; i < array.length;i++){
if(i!=index && array[i].latitude == obj.latitude
&& array[i].longitude == obj.longitude ){
return true;
}
}
return false;
});
console.log(duplicates);
推荐阅读
- java - 使用 JUnit 进行黑盒测试。如何为此特定代码创建不同的测试用例?
- kdb - 动态构建表达式的问题
- python - tkinter Treeview 绑定参数
- javascript - 如何在没有提交按钮的情况下动态地在 JavaScript 文本区域中添加和附加
- python - Atom 编辑器和 Discord 与 Python,出现错误 discord.ext.commands.errors.NoEntryPointError: Extension
- powershell - 如何使用powershell删除具有特定名称的所有文件夹
- android - 谷歌登录不允许 Firebase 身份验证/操作
- android - Flutter - Android 闪屏仍然是白色的
- event-handling - 无法在 NestJs 中捕捉事件
- node.js - UnhandledPromiseRejectionWarning:未处理的承诺拒绝。当使用 Pusher 进行实时 mongoDb