Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.12.2017, 13:57
Аспирант
Отправить личное сообщение для daima Посмотреть профиль Найти все сообщения от daima
 
Регистрация: 01.08.2012
Сообщений: 59

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 консольлогом - действительно андефайнид
Что не так?
Ответить с цитированием
  #2 (permalink)  
Старый 22.12.2017, 14:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

daima,
return не тот и не там
Ответить с цитированием
  #3 (permalink)  
Старый 22.12.2017, 14:56
Аспирант
Отправить личное сообщение для daima Посмотреть профиль Найти все сообщения от daima
 
Регистрация: 01.08.2012
Сообщений: 59

Сообщение от рони Посмотреть сообщение
daima,
return не тот и не там
А как надо?
Ответить с цитированием
  #4 (permalink)  
Старый 22.12.2017, 15:31
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

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
        },[])
Ответить с цитированием
  #5 (permalink)  
Старый 22.12.2017, 15:54
Аспирант
Отправить личное сообщение для daima Посмотреть профиль Найти все сообщения от daima
 
Регистрация: 01.08.2012
Сообщений: 59

Хмм.. 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
        },[])
Ответить с цитированием
  #6 (permalink)  
Старый 22.12.2017, 16:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

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)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книга: JavaScript. Сильные стороны Magneto Учебные материалы 16 21.04.2013 15:28
Интерпретатор Java на JS kobezzza Оффтопик 24 11.10.2012 18:32
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 15:23
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34