Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.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_Object_Dictionary_Filter - Fatal编程技术网

Javascript 过滤对象数组并使用键数组提取其属性

Javascript 过滤对象数组并使用键数组提取其属性,javascript,arrays,object,dictionary,filter,Javascript,Arrays,Object,Dictionary,Filter,我遇到了一个我无法解决的问题 如果输入一个代码就更好了 //Array of objects sample var objects = [{id:1, name:'test1'}, {id:2, name:'test2'}, {id:3, name: 'test3'}, {id:4, name:'test4'}]; var arrayOfKeys = [3,1,4]; //extract object name property if its id property is equivalent

我遇到了一个我无法解决的问题

如果输入一个代码就更好了

//Array of objects sample
var objects = [{id:1, name:'test1'}, {id:2, name:'test2'}, {id:3, name: 'test3'}, {id:4, name:'test4'}];
var arrayOfKeys = [3,1,4];

//extract object name property if its id property is equivalent to one of arrayOfKeys [3,1] 
//var arrayOfKeys = [3,1,4];
//output sample: extractedName=['test3','test1','test4'];

我一直在使用filter和map,但没有用,还尝试在map中嵌套filter,我得到了一个数组,里面是一个对象。

你可以映射对象,并映射想要的键以获得名称

var objects=[{id:1,名称:'test1'},{id:2,名称:'test2'},{id:3,名称:'test3'}],
arrayOfKeys=[3,1],
result=arrayOfKeys.map((map=>id=>map.get(id).name)(新的map(objects.map(o=>[o.id,o]));

控制台日志(结果)
我假设您需要将数组编号映射到
id
属性?这是一段代码,您可以
通过数字映射
,并
在数组中查找
,以处理对象数组中没有此类
id
的情况:

var objects=[{id:1,名称:'test1'},{id:2,名称:'test2'},{id:3,名称:'test3'}];
var arrayOfKeys=[3,1];
var res=arrayOfKeys.map(键=>{
var found=objects.find(o=>o.id==key);
返回找到?找到。名称:false;
})
console.log(res)
let objects=[{id:1,名称:'test1'},{id:2,名称:'test2'},{id:3,名称:'test3'},{id:4,名称:'test4'}],
arrayOfKeys=[3,1,4];
让result=objects.reduce((res,obj)=>{//在对象数组上循环
让index=arrayOfKeys.indexOf(obj.id);//检查当前对象的id是否在键数组中
如果(索引!==-1){//如果它在那里
res.push(obj.name);//然后将当前对象的名称添加到结果数组中
splice(index,1);//从键数组中删除它的id,这样我们就不会再搜索它了(可选,比保留它要好一点)
}
返回res;
}, []);

控制台日志(结果)我认为您使用过滤器的方法是正确的。您可以使用一些工具使其可读性和简洁性

var objects=[{id:1,名称:'test1'},{id:2,名称:'test2'},{id:3,名称:'test3'},{id:4,名称:'test4'}],
arrayOfKeys=[3,1,4];
var result=objects.filter((x,i)=>{
if(arrayOfKeys.some(k=>x.id==k)){
返回true;
}
})

log(result.map(x=>x.name))
我不太明白你到底想要什么名称总是
testN
其中
N
是一个数字?@ibrahimmahrir是的,它是连续的,即使我向arrayOfKeys添加了另一个id,它仍然应该与objectNice的id属性相对应@安德烈亚斯:我不同意。她的回答总是非常有效,我总是从她的代码中学到一些新的东西。