2017-10-25 3 views
1

Ich frage mich, warum, wenn ich versuche, ein Objekt zurückzugeben, wenn ich sofort einen Wert zuweisen, ist das Ergebnis nicht so, wie ich erwartet hatte und die Lamda-Funktion gibt mir kein Objekt zurück, sondern den Wert.Javascript Lambda (Pfeil) Funktion gibt Objekt in einem Moment eines Werts

Auf meine Frage hier zu klären Code:

1) Falsche Variante (aber ich möchte so etwas verwenden, weil es ein lil bit kürzeste) ist

const a = { 
"a" : "a", 
"b" : "b", 
"c" : "c" 
} 

const res = Object.keys(a).reduce((res, key) => (res[key] = 0), {}); 
console.log(res) // result -> 0; but why, does it return an assigning value in that case? 

2-Variante (richtig, aber ein wenig Bit am längsten)

const a = { 
"a" : "a", 
"b" : "b", 
"c" : "c" 
} 

const res = Object.keys(a).reduce((res, key) => { res[key] = 0; return res; }, {}); 
console.log(res); // { "a" : 0, "b" : 0, "c" : 0 }. It works properly now! 

Kann mir bitte jemand helfen, diesen Moment zu verstehen? Ich glaube, dass es eine dumme Frage ist, aber ich werde für jede Information sehr dankbar sein. Vielen Dank!

+0

Ein gemeinsames Idiom ist 'Object.assign' zurückzukehren, siehe https://stackoverflow.com/questions/42974735/create-object-from-array – georg

+0

Danke Freund! – Velidan

Antwort

6

Zuweisungen wie res[key] = 0 geben den zugewiesenen Wert 0 zurück. Sie müssen res zurückgeben. Sie können die comma operator verwenden den letzten Wert zurück (res):

const a = { 
 
"a" : "a", 
 
"b" : "b", 
 
"c" : "c" 
 
} 
 

 
const res = Object.keys(a).reduce((res, key) => (res[key] = 0, res), {}); 
 
console.log(res)

+1

groß, Verwendungen von reduzieren https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce?v=b –

+0

Und? Ich mache das gleiche - Iterieren über alle Elemente und reduzieren Sie es in eine item =) – Velidan

+0

Ori Drori, vielen Dank für die Erklärung! – Velidan

Verwandte Themen