Вход

Просмотр полной версии : javascript reduce


daima
22.12.2017, 13:57
Есть массив объектов. Его надо фильтрануть, а к фильтрованным объектам добавить новые св-ва. Чтобы бегать по массиву 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
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)