首页 > 解决方案 > 找到匹配属性时从数组中删除对象

问题描述

我想以相反的顺序从我的数组中删除任何具有匹配start和属性的对象。end

const arr = [
  { start: 'Nebraska', end: 'Kentucky' },
  { start: 'Montana', end: 'New York' },
  { start: 'Wyoming', end: 'California' },
  { start: 'California', end: 'Wyoming' },
  { start: 'New Hampshire', end: 'Ohio' },
]

即,如果这两个对象存在于数组中

{ start: 'Wyoming', end: 'California' },
{ start: 'California', end: 'Wyoming' }

我想删除

{ start: 'California', end: 'Wyoming' }

我觉得reduce这是解决方案的方法,但不太确定如何实现它。任何建议表示赞赏

标签: javascriptarraysreduce

解决方案


您可以使用Map轻松实现结果

您也可以将其设为单线

arr.filter(({ start, end }) => map.get(end) === start ? false : map.set(start, end))

const arr = [
  { start: "Nebraska", end: "Kentucky" },
  { start: "Montana", end: "New York" },
  { start: "Wyoming", end: "California" },
  { start: "California", end: "Wyoming" },
  { start: "New Hampshire", end: "Ohio" },
];

const map = new Map();
const result = arr.filter(({ start, end }) => {
  if (!(map.get(end) === start)) {
    map.set(start, end);
    return true;
  }
  return false;
});
console.log(result);


推荐阅读