Javascript ES6中简单的数组/对象分解
我正在尝试返回带有选定键的新对象-reqProps。我设法用修复道具prop1、prop3实现了这一点,现在我希望能够传递reqProps数组值来替换prop1、prop3。我尝试了函数、字符串和一些“hack”。他们都不工作Javascript ES6中简单的数组/对象分解,javascript,ecmascript-6,destructuring,Javascript,Ecmascript 6,Destructuring,我正在尝试返回带有选定键的新对象-reqProps。我设法用修复道具prop1、prop3实现了这一点,现在我希望能够传递reqProps数组值来替换prop1、prop3。我尝试了函数、字符串和一些“hack”。他们都不工作 const data = [ { prop1: 1, prop2: 2, prop3: 3 }, { prop1: 10, prop2: 20, prop3: 30 }, { prop2: 200
const data = [
{
prop1: 1,
prop2: 2,
prop3: 3
},
{
prop1: 10,
prop2: 20,
prop3: 30
},
{
prop2: 200,
prop4: 400
},
{
prop3: 3000
}
];
// to return properties for the following...
const reqProps = ['prop2','prop3','prop4'];
// current implementation fixing return object with prop1, prop3
const obj = data.map(({prop1, prop3}) => {
return {prop1, prop3};
});
目前,obj的结果是
[{"prop1":1,"prop3":3},{"prop1":10,"prop3":30},{},{"prop3":3000}]
我不想使用循环,就像分解结构的“力量”;) 如果您坚持进行分解,则必须使用
eval
:
const reqProps = ['prop2','prop3','prop4'];
const literalString = '{'+reqProps.join(',')+'}';
const obj = data.map(new Function(literalString, 'return '+literalString));
你真的应该使用循环-你也可以将它隐藏在助手函数中,或者只使用
reduce
如果你坚持要解构,你必须使用eval
:
const reqProps = ['prop2','prop3','prop4'];
const literalString = '{'+reqProps.join(',')+'}';
const obj = data.map(new Function(literalString, 'return '+literalString));
你真的应该使用循环-你也可以将它隐藏在助手函数中,或者只使用
reduce
正如@Bergi所建议的,你最好以某种方式使用循环
这里有一个隐式循环的变体:
data.map(o => reqProps.filter(p => p in o)
.reduce((acc, p) => ({...acc, [p]: o[p]}), {}))
正如@Bergi所建议的,您最好以某种方式使用循环 这里有一个隐式循环的变体:
data.map(o => reqProps.filter(p => p in o)
.reduce((acc, p) => ({...acc, [p]: o[p]}), {}))
你想干什么?使用数组中的字符串进行分解?你想做什么?是否使用数组中的字符串进行分解?