通过 id 数组过滤原始对象数组
Filter the original array of objects by array of ids
我有两个数组:
数组a:
var a = [
{
id: 1,
name: 'a'
},
{
id: 2,
name: 'b'
},
{
id: 3,
name: 'c'
}
];
数组 ids:
var ids = [1];
我想排列一个按数组 ID 过滤的数组,我想要的结果:
var a = [
{
id: 1,
name: 'a'
}
];
最重要的是我想要对原始数组进行更改,而不是 return 一个新数组。
下划线解决方案更好:)
您可以使用.filter
a = a.filter(function(el){
return ~ids.indexOf(el.id)
});
// should give you [{id: 1, name: 'a'}]
今天我尝试解决类似的任务(在不创建新数组的情况下过滤 原始 对象数组),这就是我想出的:
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'}]
关键是我们需要通过原始数组循环回来才能使用 Array.prototype.splice
,但我不想要 for 循环,我想要 ES6 单行代码。 Array.from(Array(a.length).keys()).reverse()
给了我一个原始数组的反向索引列表。然后我想仅当 ids
数组中不存在相应项目的 id
时才按当前索引拼接原始数组。
我有两个数组:
数组a:
var a = [
{
id: 1,
name: 'a'
},
{
id: 2,
name: 'b'
},
{
id: 3,
name: 'c'
}
];
数组 ids:
var ids = [1];
我想排列一个按数组 ID 过滤的数组,我想要的结果:
var a = [
{
id: 1,
name: 'a'
}
];
最重要的是我想要对原始数组进行更改,而不是 return 一个新数组。
下划线解决方案更好:)
您可以使用.filter
a = a.filter(function(el){
return ~ids.indexOf(el.id)
});
// should give you [{id: 1, name: 'a'}]
今天我尝试解决类似的任务(在不创建新数组的情况下过滤 原始 对象数组),这就是我想出的:
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'}]
关键是我们需要通过原始数组循环回来才能使用 Array.prototype.splice
,但我不想要 for 循环,我想要 ES6 单行代码。 Array.from(Array(a.length).keys()).reverse()
给了我一个原始数组的反向索引列表。然后我想仅当 ids
数组中不存在相应项目的 id
时才按当前索引拼接原始数组。