Javascript 通过预定义的属性名称数组获取对象属性

Javascript 通过预定义的属性名称数组获取对象属性,javascript,Javascript,我对以前回答过的这类问题很有把握,但我找不到好的答案 我有一个像物体的数组 [ { prop1:"foo1", prop2:"baz1", prop3:"bar1", prop4:"qux1"} { prop1:"foo2", prop2:"baz2", prop3:"bar2", prop4:"qux2"} { prop1:"foo3", prop2:"baz3", prop3:"bar3", prop4:"qux3"} ] 我有一个数组,它存储所需的属性名称,如 [ "prop

我对以前回答过的这类问题很有把握,但我找不到好的答案

我有一个像物体的数组

[
  { prop1:"foo1", prop2:"baz1", prop3:"bar1", prop4:"qux1"}
  { prop1:"foo2", prop2:"baz2", prop3:"bar2", prop4:"qux2"}
  { prop1:"foo3", prop2:"baz3", prop3:"bar3", prop4:"qux3"}
]
我有一个数组,它存储所需的属性名称,如

[ "prop1", "prop2" ]
所以我需要用另一个数组给出的属性名过滤数组中的所有对象。输出结果如下:

[   
 { prop1:"foo1", prop2:"baz1" }   
 { prop1:"foo2", prop2:"baz2" }  
 { prop1:"foo3", prop2:"baz3" } 
]

如何正确地执行此操作?

您可以使用
reduce
方法创建
pick
函数,然后使用
map
方法

const data=[{prop1:“foo1”,prop2:“baz1”,prop3:“bar1”,prop4:“qux1”},{prop1:“foo2”,prop2:“baz2”,prop3:“qux2”},{prop1:“foo3”,prop2:“baz3”,prop3:“bar3”,prop4:“qux3”}]
常量属性=[“属性1”,“属性2”]
常量pick=(o,p)=>p.reduce((r,e)=>Object.assign(r,{[e]:o[e]}),{})
const res=data.map(o=>pick(o,props));

console.log(res)
您可以执行以下操作以获得结果:

const数据=[
{prop1:“foo1”,prop2:“baz1”,prop3:“bar1”,prop4:“qux1”},
{prop1:“foo2”,prop2:“baz2”,prop3:“bar2”,prop4:“qux2”},
{prop1:“foo3”,prop2:“baz3”,prop3:“bar3”,prop4:“qux3”},
]
常量键=[“prop1”、“prop2”]
让结果=data.map((记录)=>{
设obj={}
key.forEach((key)=>{
obj[键]=记录[键]
})
返回obj
})
console.log(结果)
您可以使用
map()
reduce()

const数据=[
{prop1:“foo1”,prop2:“baz1”,prop3:“bar1”,prop4:“qux1”},
{prop1:“foo2”,prop2:“baz2”,prop3:“bar2”,prop4:“qux2”},
{prop1:“foo3”,prop2:“baz3”,prop3:“bar3”,prop4:“qux3”}
];
常量props=[“prop1”、“prop2”];
const res=data.map(e=>props.reduce((a,c)=>(a[c]=e[c],a),{}));
console.log(res)
让arr=[
{prop1:“foo1”,prop2:“baz1”,prop3:“bar1”,prop4:“qux1”},
{prop1:“foo2”,prop2:“baz2”,prop3:“bar2”,prop4:“qux2”},
{prop1:“foo3”,prop2:“baz3”,prop3:“bar3”,prop4:“qux3”}
]
让过滤器=[“prop1”,“prop2”];
释放=[…arr].map(e=>Object.keys(e).map(k=>!filter.includes(k)?删除e[k]:true)和&e);

console.log(out)
很好的解决方案,为了可读性,您能使用更明确的变量名吗?我理解使用一行程序的意义,但是reduce的参数不够模糊(无论如何都是向上投票)@axelduch
a
是累加器,
c
是当前元素。文件概述了我所说的论点,而不是那些不熟悉reduce的人。这对他们来说并不可怕:)但很公平——对它足够好奇的人无论如何都会去看医生