2017-09-05 3 views
0

Ich versuche ein neues Objekt mit ausgewählten Schlüsseln zurückzugeben - reqProps. Ich habe es geschafft, es mit Fixes Requisiten prop1, prop3 zu tun und jetzt in der Lage sein, ReqProps Array-Werte zu übergeben, um prop1, prop3 zu ersetzen. Ich habe versucht, Funktion und String Literale und einige "Hacks". Keiner von ihnen arbeiteteEinfaches Destrukturieren Array/Objekt in 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}; 
}); 

Das Ergebnis obj für den Moment ist

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

Ich will nicht Schleifen verwenden, ganz wie die ‚Macht‘ der Destrukturierung! ;)

+0

Was wollen Sie tun? Verwenden Sie die Strings im Array zur Destrukturierung? – T4rk1n

Antwort

2

Wenn Sie auf Destrukturierung bestehen, haben Sie eval verwenden:

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

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

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

Sie sollten wirklich eine Schleife verwenden - Sie auch in einer Hilfsfunktion verwenden oder einfach nur reduce verstecken können.

+0

Danke @Bergi, nur deine Lösung scheint zu funktionieren – maciejk77

2

Wie von @Bergi vorgeschlagen, sollten Sie Loops in irgendeiner Weise verwenden.

Hier ist eine Variante mit impliziten Schleifen:

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