比较数组以获取值列表

时间:2020-09-10 00:33:16

标签: javascript arrays ecmascript-6 lodash

我有第一个数组的列表

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'}]

3 个答案:

答案 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#filterSet#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)。数组过滤器将自动显示结果为真的那些