2017-09-05 15 views
0

選択したキーで新しいオブジェクトを返そうとしています - reqProps。私はfixesの小道具prop1、prop3でそれをやっていましたが、prop1、prop3に代わるreqProps配列の値を渡したいと思っています。私は関数と文字列リテラルといくつかの 'ハック'を試みました。それらのどれもが一瞬OBJの結果は、私は、非常に非構造の「パワー」のようなループを使用したくないES6で単純な構造体を削除する配列/オブジェクト

[{"prop1":1,"prop3":3},{"prop1":10,"prop3":30},{},{"prop3":3000}] 

ある

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}; 
}); 

を働きました! ;)

+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]}), {})) 
関連する問題