js 提取数组中的共有部分

slowly
  • 24

image.png
如图想提取options和data中id相同的对象,除了用双循环还有什么办法呢

回复
阅读 1.2k
3 个回答
✓ 已被采纳
const options = [{id: 2, name: 123}, {id: 3, name: 3}]

const data = [{id: 2, name: 123}, {id: 4, name: 23432}];

const ids = options.reduce((res,v) => (res.add(v.id)), new Set)

const sp = data.filter(v => ids.has(v.id))
console.log(sp)

ps:提问不要用图片

肯定是需要遍历一遍的。维护一个空间,如果存在就push。

比如说用options维护存在列表。然后用data去push。性能肯定比你这个好

你这个是 N*N,那个是 2N


还可以排序。然后双指针啥的,不用维护额外空间。

let a = [
  { id: 1, name: 11 },
  { id: 2, name: 22 },
  { id: 3, name: 33 },
];
let b = [
  { id: 3, name: 33 },
  { id: 4, name: 33 },
];
let c = {},
      d = [];
a.concat(b).forEach((item) => {
  if (c[item.id]) {
    d.push(item);
  }
  c[item.id] = true;
});
console.log(d);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏