2016-12-22 2 views
3

Следующая явно не работает, но это цель, которую я пытаюсь достичь:Вызов функции в цикле массив Еогеасп с вложенными данными

items.forEach(addData(item.data)); 

Я знаю, что я могу сделать:

items.forEach(function(item){ 
    addData(item.data) 
}); 

, но мне было интересно, есть ли способ сократить или уменьшить это.

редактировать:

Я также призываю ту же функцию добавления данных с массивом элементов, которые не вложены, как так:

items.forEach(addItemId) 

, поэтому я пытался найти способ использовать ту же функцию (аналогичным образом) для вложенного объекта.

+2

Lambda? 'items.forEach (item => addData (item.data));' –

+0

Я не думаю, что в обычном Javascript есть сокращение. Библиотеки, такие как underscore.js и lodash, вероятно, имеют способы сделать это. – Barmar

+0

iirc can not вы связываете аргумент функции с функцией @Barmar? –

ответ

0

Если вы можете обновить вашу функцию, чтобы использовать item вместо item.data вы могли бы сделать это:

items.forEach(addData); 

Это будет вызывать AddData с каждым item, не item.data хотя

+0

Хотя это верно, у Бармара была хорошая точка, что это не обобщает решение. не хотите это делать и ищет способ привязать параметр item.data, а не элемент –

1

Используйте функцию ES6: лямбды.

items.forEach(item => addData(item.data)); 

Я пытаюсь найти способ использовать .bind здесь, но, честно говоря, это довольно чистый путь. Один вкладыш, стенография для function() { }.

+1

Как насчет немного 'items.forEach (({data}) => addData (data));' – tengbretson

+0

Является ли это фантазийным деструктурированием Я вижу? –

+0

Правильно. Что значит программировать, если вы не можете заставить себя чувствовать себя умным? – tengbretson

0

Я не обязательно рекомендую делать это в рабочем коде, но вы можете сделать что-то подобное с небольшим комбинатора:

const map_into = k => fn => o => fn(o[k]); 

items.forEach(map_into('data')(addData)); 
Смежные вопросы