javascript - Javascript:使用单个属性删除对象数组中的重复项
问题描述
我有这样的对象,其中“id”是独一无二的。我需要从低于 ES5 的任何版本的 javascript 中的对象数组中删除重复项。我需要根据 id 字段进行比较并删除其重复项。
例子:
Object = [
{id: id_one, value: value_one, label: ABC},
{id: id_one, value: value_one, label: ABC},
{id: id_three, value: value_three, label: ABX},
{id: id_two, value: value_two, label: ABY},
{id: id_four, value: value_four, label: ABD}
];
输出:
result = [
{id: id_one, value: value_one, label: ABC},
{id: id_three, value: value_three, label: ABX},
{id: id_two, value: value_two, label: ABY},
{id: id_four, value: value_four, label: ABD}
];
我试过这样的逻辑,
function getDistValues(object) {
var distObject = [];
var tempIndex = [];
var length = object.length;
for (var i = 0; i < length; i++) {
tempIndex.push(object[i].id);
if (tempIndex.indexOf(object[i].id) === -1 || i === 0) {
distObject.push(object[i]);
}
}
return distObject;
}
它只给出第一个对象。我尝试映射 ID 并进行比较,但没有成功。
任何帮助都会对我有用。
解决方案
这是因为您总是将 id 添加到tempIndex
数组中,所以它总是认为当前的 id 是重复的。尝试:
function getDistValues(object) {
var distObject = [];
var tempIndex = [];
var length = object.length;
for (var i = 0; i < length; i++) {
if (tempIndex.indexOf(object[i].id) === -1 || i === 0) {
tempIndex.push(object[i].id);
distObject.push(object[i]);
}
}
return distObject;
}
推荐阅读
- c++ - 没有规则使用 CMAKE 添加库来制作目标。库单独编译就好了
- mysql - 不使用 with 子句重写 sql
- docker - 我在 docker 容器中运行 cassandra。通过复制 cassandra 表生成的文件存储在哪里?
- asp.net - 为什么 web.config 文件会为 CSP 中的不安全内联引发无法识别的错误?
- python - 无法在 mac os x mojave 上安装 mysqlclient
- http - Google App Engine 上的封闭正文读取无效
- android - 手机锁定时保持应用程序运行的问题
- intellij-idea - IntelliJ:主题不适用于 src 文件夹之外的文件
- angular - 如何告诉量角器在全局使用 baseUrl 中的哈希?
- r - 数据框操作:如何替换文本列中的工件?