Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   javascript reduce (https://javascript.ru/forum/dom-window/71934-javascript-reduce.html)

daima 22.12.2017 13:57

javascript reduce
 
Есть массив объектов. Его надо фильтрануть, а к фильтрованным объектам добавить новые св-ва. Чтобы бегать по массиву 2 раза (filter+map) решил восп. reduce:

let arr = arr_old.reduce((a, b, i, array)=>{

                if(b.offer_type === '1'){

                    return a.push( 
                        Object.assign({}, b, {
                            user_name: `${b.user_name},
                            loading: false
                        })
                    )
                }
        },[])


Но Хром ругается: Uncaught TypeError: Cannot read property 'push' of undefined
Вывожу a консольлогом - действительно андефайнид
Что не так?

рони 22.12.2017 14:32

daima,
return не тот и не там

daima 22.12.2017 14:56

Цитата:

Сообщение от рони (Сообщение 473529)
daima,
return не тот и не там

А как надо?

рони 22.12.2017 15:31

daima,
let arr = arr_old.reduce((a, b, i, array)=>{

                if(b.offer_type === '1'){

                    a.push(
                        Object.assign({}, b, {
                            user_name: `${b.user_name}`,
                            loading: false
                        })
                    )
                };
              return a
        },[])

daima 22.12.2017 15:54

Хмм.. a же типа андефайнид. Сделал так, вроде фурычит

let arr = arr_old.reduce((a=[], b, i, array)=>{
            if(b.offer_type === '1'){
                return [...a,
                    Object.assign({}, b, {
                        user_name: `${b.user_name}`,
                       loading: false

                    })
                ]
            } else return a
        },[])

рони 22.12.2017 16:00

daima,
ошибка где?
"use strict"
let arr_old = [{offer_type : 0, user_name : "x"}, {offer_type : "1" , user_name : "y"}];
let arr = arr_old.reduce((a, b, i, array)=>{

                if(b.offer_type === '1'){
                    a.push(
                        Object.assign({}, b, {
                            user_name: `${b.user_name}`,
                            loading: false
                        })
                    )
                };
              return a
        },[])
console.log(arr)


Часовой пояс GMT +3, время: 04:48.