javascript - 从数组中删除所有具有特征 X 的元素,最新的除外

标签 javascript arrays node.js reactjs algorithm

我有以下对象:

[
  { name: "Peter", id: 25, job: "carpenter" },
  { name: "Peter", id: 25, job: "shelf maker" },
  { name: "John", no: 20, job: "student" },
  { name: "John", id: 20, job: "university student" },
  { name: "John", id: 20, job: "student at uni still" },
  { name: "Jack", id: 20, job: "university student" }
]

我想遍历这个数组,只要 nameid 相同,我只想保留一个条目,即最新出现的条目 在数组中,并丢弃所有其余的。我该怎么做?

我已经尝试过

for(let i=0;i<people.length;i++) {
const person = people[i];
const result = people.filter(person => person.id === id && person.name === name);

people[i] = person;
}

...但这不起作用。有什么想法我做错了吗?你会如何处理这个问题?

最佳答案

您可以使用reduceRight构建新数组,从数组末尾开始迭代,也可以使用Map作为累加器值来存储键-值 对。

const data = [{"name":"Peter","id":25,"job":"carpenter"},{"name":"Peter","id":25,"job":"shelf maker"},{"name":"John","no":20,"job":"student"},{"name":"John","id":20,"job":"university student"},{"name":"John","id":20,"job":"student at uni still"},{"name":"Jack","id":20,"job":"university student"}]

const map = data.reduceRight((r, e) => {
  const key = `${e.name}|${e.id}`;
  if (!r.has(key)) r.set(key, e);
  return r;
}, new Map);

const uniq = [...map.values()];
console.log(uniq)

关于javascript - 从数组中删除所有具有特征 X 的元素,最新的除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57220770/

相关文章:

node.js - ng serve编译后如何使用命令提示符

node.js - 每个 axios 请求在 React-Redux 应用程序中都会触发两次?

node.js - Firebase Admin SDK - 创建没有密码的用户是否安全?

javascript - 单击第一次提交后显示第二个提交按钮与表单提交 - Javascript

ios - Swift 2.1 破坏了 ZCarousel;字符串数组

arrays - 在 ruby​​ 中对数组的每 3 个元素求和

javascript - 多次 array.sort 后数组顺序发生变化

javascript - 滚动一个 div 以切换多个 div 标签

javascript - 每隔一天显示文本 "A Day"或 "B Day",无论当前日期如何

javascript - 请解释为什么 .className 属性不起作用?