Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何基于另一个数组中的值筛选具有的对象数组_Javascript_Arrays - Fatal编程技术网

Javascript 如何基于另一个数组中的值筛选具有的对象数组

Javascript 如何基于另一个数组中的值筛选具有的对象数组,javascript,arrays,Javascript,Arrays,我有两个数组,第一个包含对象,第二个包含ID。我想从第一个数组返回一个新数组,该数组具有来自第一个数组的ID。做这件事的最佳和有效的方法是什么 const firstArr = [{id: 1, city: London}, {id: 5, city: 'Berlin'}, {id: 10, city: 'Paris'}, {id: 2, city: 'Rome'}] const secondArr = ['2', '5'] const wantedArr = [{id: 2, city:

我有两个数组,第一个包含对象,第二个包含ID。我想从第一个数组返回一个新数组,该数组具有来自第一个数组的ID。做这件事的最佳和有效的方法是什么

const firstArr = [{id: 1, city: London}, {id: 5, city: 'Berlin'}, {id: 10, city: 'Paris'}, {id: 2, city: 'Rome'}]

const secondArr = ['2', '5']

const wantedArr = [{id: 2, city: 'Rome'}, {id: 5, city: 'Berlin'}]

这应该可以做到:

secondArr.map(e => firstArr.filter(a => a.id == +e))

我正在使用
+e
将字符串转换为int,这可能不是最好的方法,但肯定是最短的方法。

这应该可以做到:

secondArr.map(e => firstArr.filter(a => a.id == +e))

我使用
+e
将字符串转换为int,可能不是最好的方法,但肯定是最短的方法。

对于线性时间复杂度,将第二个数组转换为set,然后使用
set.prototype.has

const firstArr=[{id:1,城市:'伦敦'},{id:5,城市:'柏林'},{id:10,城市:'巴黎'},{id:2,城市:'罗马'}]
const secondArr=['2','5'];
let set=新的set(secondArr);
const res=firstArr.filter(x=>set.has(String(x.id));

console.log(res)
对于线性时间复杂度,将第二个数组转换为set,然后使用
set.prototype.has

const firstArr=[{id:1,城市:'伦敦'},{id:5,城市:'柏林'},{id:10,城市:'巴黎'},{id:2,城市:'罗马'}]
const secondArr=['2','5'];
let set=新的set(secondArr);
const res=firstArr.filter(x=>set.has(String(x.id));

console.log(res)
您可以使用
.indexOf()
.includes()
方法实现这一点

const firstArr=[{id:2,城市:'伦敦'},{id:2,城市:'东京'},{id:5,城市:'柏林'},{id:10,城市:'巴黎'},{id:6,城市:'罗马'}];
const secondArr=['2','5'];
常量输出=firstArr.filter((r)=>{
返回secondArr.includes(`r.id}`);
});

控制台日志(输出)
您可以使用
.indexOf()
.includes()
方法来实现这一点

const firstArr=[{id:2,城市:'伦敦'},{id:2,城市:'东京'},{id:5,城市:'柏林'},{id:10,城市:'巴黎'},{id:6,城市:'罗马'}];
const secondArr=['2','5'];
常量输出=firstArr.filter((r)=>{
返回secondArr.includes(`r.id}`);
});

控制台日志(输出)能否请您编辑问题以包含您已经尝试过的内容。我相信这可能是一个问题,您是否可以编辑问题以包含您已经尝试过的内容。我相信这可能是一个乐于帮助的问题:)乐于帮助:)