我有第一个数组的列表
const a = [{id:1, value:'apple'}, {id:2, value: 'ball'},{id:3, value: 'cat'}]
我还有另一个ID数组
const ids = [1,2]
现在,我需要从a
获取数组值的列表,该列表的ID在ID数组中列出。预期结果:
const b = [{id:1, value:'apple'}, {id:2, value: 'ball'}]
答案 0 :(得分:0)
您可以使用Array.prototype.filter
:
a.filter(({ id }) => ids.includes(id));
const a = [{id:1, value:'apple'}, {id:2, value: 'ball'}];
const ids = [1,2];
const result = a.filter(({ id }) => ids.includes(id));
console.log(result);
答案 1 :(得分:0)
您可以从ID数组中创建一个Set
,并将Array#filter
与Set#has
(在O(1)
时间运行)结合使用,以提高性能。
const a = [{id:1, value:'apple'}, {id:2, value: 'ball'},{id:3, value: 'cat'}]
const ids = [1,2]
const idSet = new Set(ids);
const res = a.filter(({id})=>idSet.has(id));
console.log(res);
答案 2 :(得分:-1)
如果我在这里对您的理解正确,那么您希望从value
中获取a
中具有匹配id
的每条记录的ids
参数收藏吗?
let results = a.filter(node=>ids.indexOf(node.id) !== -1);
要分解Array.prototype.filter
命令:
a.filter
在功能上告诉编译器迭代a
集合(类似于for
循环);尽管从回调中返回真实值时,返回的唯一记录都是返回的(在node=>
位之后应用该函数)。
node
是分配给迭代中正在检查的活动索引的临时变量。
ids.indexOf(...)
,它请求集合中node.id
的数字索引。如果node.id
在集合中无处存在,则indexOf
返回-1
。
总而言之:“遍历a
,并针对其中包含的每个对象,针对ids
测试每个对象,然后返回true
或{{1} },取决于是否找到了它(false
以外的某个值(-1
)。数组过滤器将自动显示结果为真的那些