2016-05-26 6 views
0

Как вы думаете, лучший способ? неArray forEach() vs reduce()

Уменьшить Путь:

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

ForEach Путь:

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

Я использую AirBnB eslint и это не нравится сократить путь, так как я могу изменить previous (не-парам-Переприсвоить)

+0

оба ваших подхода возвращают тот же результат? – RomanPerekhrest

+0

Да, они делают, это просто синтаксис! :) – Titozzz

+1

, если вам не нужно «свертывать» значения массива - используйте функцию 'forEach' – RomanPerekhrest

ответ

1

Я думаю, что reduce намного приятнее, потому что он не проливает варны повсюду. Вы могли бы сделать это немного лучше, имо.

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

А, 'Object.assign', кажется, эффективный способ работы вокруг linter :-) – Bergi

+0

Использование оператор распространения вместо object.assign –

+0

@skone вы можете использовать синтаксис распространения объекта *, если хотите, но поскольку он не поддерживается в большинстве сред, я не рекомендую его, если у вашего проекта уже есть шаг пересылки – naomik

 Смежные вопросы

  • Нет связанных вопросов^_^