2017-09-05 28 views
0

我想用选定的键返回新对象 - reqProps。我设法通过修复道具prop1,prop3来做到这一点,现在希望能够通过reqProps数组值来替换prop1,prop3。我尝试了函数,字符串文字和一些'黑客'。他们没有工作ES6中的简单解构阵列/对象

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

我不想使用循环,很喜欢解构的“权力”! ;)

+0

你到底想干什么?使用数组中的字符串解构? – T4rk1n

回答

2

如果你坚持解构,你必须使用eval

const reqProps = ['prop2','prop3','prop4']; 

const literalString = '{'+reqProps.join(',')+'}'; 

const obj = data.map(new Function(literalString, 'return '+literalString)); 

你真的应该使用一个循环 - 你也可以把它藏在一个辅助功能或只是使用reduce

+0

谢谢@Bergi,只有你的解决方案似乎工作 – maciejk77

2

正如@Bergi所说,你最好以某种方式使用循环。

下面是与隐式循环变体:

data.map(o => reqProps.filter(p => p in o) 
         .reduce((acc, p) => ({...acc, [p]: o[p]}), {}))