按ID数组过滤原始对象数组

hua*_*eng 4 javascript arrays underscore.js

我有两个数组:

数组a:

var a = [
  {
    id: 1,
    name: 'a'
  },
  {
    id: 2,
    name: 'b'
  },
  {
    id: 3,
    name: 'c'
  }
];
Run Code Online (Sandbox Code Playgroud)

数组ID:

var ids = [1];
Run Code Online (Sandbox Code Playgroud)

我想通过数组ID过滤数组,我想要的结果:

var a = [
  {
    id: 1,
    name: 'a'
  }
];
Run Code Online (Sandbox Code Playgroud)

最重要的是我想要对原始数组进行更改,而不是返回一个新数组.

下划线解决方案更好:)

bru*_*ski 7

你可以使用.filter

a = a.filter(function(el){ 
    return ~ids.indexOf(el.id)
});

// should give you [{id: 1, name: 'a'}]
Run Code Online (Sandbox Code Playgroud)

  • @Fabrice参见[here](https://wsvincent.com/javascript-tilde/)进行解释,但是很多年前我回答了这个问题,现在我建议使用[Array.includes](https:// developer。 mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/includes) (2认同)

dhi*_*ilt 4

今天我尝试解决类似的任务(过滤原始对象数组而不创建新数组),这就是我想到的:

const a = [{ id: 1, name: 'a'}, { id: 2, name: 'b'}, { id: 3, name: 'c'}];
const ids = [1];

Array.from(Array(a.length).keys()).reverse().forEach(index =>
  !ids.some(id => id === a[index].id) && a.splice(index, 1)
);

console.log(a); // [{ id: 1, name: 'a'}]
Run Code Online (Sandbox Code Playgroud)

关键是我们需要循环回原始数组才能使用Array.prototype.splice,但我不想要 for 循环,我想要 ES6 单行。并Array.from(Array(a.length).keys()).reverse()给我原始数组的反向索引列表。id然后,仅当数组中不存在相应的项时,我才想按当前索引拼接原始数组ids