2016-05-26 10 views
0

Was ist Ihrer Meinung nach der beste Weg?Array forEach() vs reduce()

Way Reduce:

const result = Object.keys(params).reduce(
     (previous, key) => { 
     if (this.model.hasOwnProperty(key)) previous[key] = this.model[key](params[key]); 
     return previous; 
    }, {}); 

FürJeden Way:

const result = {}; 
Object.keys(params).forEach(key => { 
     if (this.model.hasOwnProperty(key)) result[key] = this.model[key](params[key]); 
    }); 

ich airbnb eslint bin mit und es mag nicht die Art und Weise reduzieren, da ich previous ändern (no-param-Umhängen)

+0

beide Ansätze ergeben das gleiche Ergebnis? – RomanPerekhrest

+0

ja, das ist es, es geht nur um die Syntax! :) – Titozzz

+1

Wenn Sie keine Array Werte "aufrollen" müssen - benutzen Sie 'forEach' Funktion – RomanPerekhrest

Antwort

1

Ich denke, die reduce ist viel schöner, weil es vars nicht überall verschüttet. Du könntest es noch ein bisschen besser machen, imo.

var result = Object.keys(params).reduce((res,k)=> 
    this.model.hasOwnProperty(k) 
    ? Object.assign(res, {[k]: this.model[k](params[k])}) 
    : res, {}); 
+2

Ah, 'Object.assign' scheint eine effektive Methode zu sein um den Linter zu arbeiten :-) – Bergi

+0

Verwenden Spread Operator anstelle von object.assign –

+0

@skone Sie können Objekt Spread * Syntax * wenn Sie wollen, aber da es nicht in den meisten Umgebungen unterstützt wird, empfehle ich es nicht, es sei denn, Ihr Projekt hat bereits einen transpilen Schritt – naomik