2016-10-05 4 views
-1

Так в основном вот что у меня есть, который работает как задумано -Функциональный способ создания массива из свойств массива объектов?

 let newList: any[] = []; 

     for (let stuff of this.Stuff) { 
      newList = newList.concat(stuff.food); 
     } 

Так в основном веществе является массивом объектов, где каждый объект имеет свойство, которое является еще одним объектом называется пища. Я хочу пройти через этот массив Stuff и создать новый массив с каждым экземпляром пищи внутри него.

Я не думаю, что я сделал это плохо, мне просто интересно узнать, как кто-то сделал бы это без цикла for.

Cheers.

+0

'пусть NewList = this.Stuff.map (o => o.food) 'даст вам массив объектов' food' из 'Stuff' –

+0

' stuff.food' не является ar луч, верно? Тогда вы не должны использовать 'concat', или, по крайней мере, сначала его обернуть:' .concat ([stuff.food]) ' – Bergi

ответ

2

Вы ищете map method:

const newList = this.Stuff.map(stuff => stuff.food); 

Вы не должны использовать непрерывное переназначение переменного, и это, конечно, не работает :-) Кроме того, с помощью concat несколько раз довольно неэффективен, вам Лучше использовать push в цикле for…of. Но map все еще проще и лучше.

0

Попробуйте этот подход, также используя метод reduce

var arr = [[1,2,3],[4,5,6],[7,8,9]]; 
 
var output = arr.reduce(function (prev, curr){ return prev.concat(curr) }); 
 
console.log(output);

0

Вы можете выразить это красиво с дополнительным функциональным примитивным

const prop = x => y => y[x]; 

const newList = this.Stuff.map(prop('food'));