Как правильно передать объект в промисе?

198
04 марта 2019, 23:10

Доброй ночи, ребята.

Есть небольшой вопрос.

Есть функция Которая чистит массив объектов.

Результат этой функции я передаю далее по цепочке .then и после передачи перестаёт работать перебор данного объекта.

В чем причина подскажите кто знает.

const remDupl = function (arr, fild) { 
    var rez = {news:[]}; 
    var lookupObject  = {}; 
 
    for(var i in arr) { 
        lookupObject[arr[i][fild]] = arr[i]; 
    } 
 
    for( i in lookupObject) { 
        rez.news.push(lookupObject[i]); 
    } 
    return rez; 
};

как можно убедиться далее все тут работает хорошо.

const remDupl = function (arr, fild) { 
    var rez = {news:[]}; 
    var lookupObject  = {}; 
 
    for(var i in arr) { 
        lookupObject[arr[i][fild]] = arr[i]; 
    } 
 
    for( i in lookupObject) { 
        rez.news.push(lookupObject[i]); 
    } 
    return rez; 
}; 
 
 
let arr={ 
    news : [ 
        {'title': 'one'}, 
        {'title': 'two'}, 
        {'title': 'three'}, 
        {'title': 'four', 'name': 'dima'}, 
        {'title': 'four', 'name': 'alex'}, 
        {'title': 'one', 'name': 'alex'}, 
    ] 
}; 
 
 
 
let rec = remDupl(arr.news, 'title'); 
 
console.log(rec);

Однако Дело обстоит Хуже когда перебается результат этой функции далее через промисы.

добавляется почему то? инекс 0 и все бы ничего но даже про этому адресу перебором через forEach резуль --- тат Пустота

Вот так выглядит тест этой функции

let rec = remDupl(arr.news, 'title');
console.log(rec);

Вот как выглядит объект после передачи промисом

console.log(cleanArr);

Как видно добавился индекс 0 откуда ? И почему не работает на нём перебор?

вывод предыдущего промиса.

  .then(pulledNews => {
    return remDupl(pulledNews, 'title');
})
.then(cleanArr => {
    // console.log(cleanArr);
    cleanArr.news[0].forEach(item=>{console.log(item)});
})

Answer 1

Вы хотели чего-то такого? -

const remDupl = function (arr, fild) { 
    var rez = {news:[]}; 
    var lookupObject  = {}; 
 
    for(var i in arr) { 
        lookupObject[arr[i][fild]] = arr[i]; 
    } 
 
    for( i in lookupObject) { 
        rez.news.push(lookupObject[i]); 
    } 
    return rez; 
}; 
 
new Promise(function(resolve, reject) { 
  let arr = { 
    news: [ 
      { 'title': 'one' }, 
      { 'title': 'two' }, 
      { 'title': 'three' }, 
      { 'title': 'four', 'name': 'dima' }, 
      { 'title': 'four', 'name': 'alex' }, 
      { 'title': 'one', 'name': 'alex' } 
    ] 
  }; 
  resolve(arr); 
}) 
.then(pulledNews => remDupl(pulledNews.news, 'title')) 
.then(cleanArr   => cleanArr.news.forEach(item => console.log(item)));

READ ALSO
Почему не работает js в Firefox?

Почему не работает js в Firefox?

В остальных браузерах работает а в Mozilla Firefox нет, это скрипт для сворачивания меню при опускании вниз скроллингом

184
Группировка объектов в массиве

Группировка объектов в массиве

Имеется, например, несколько объектов в массиве:

164
Next и prev в меню

Next и prev в меню

Есть меню, есть кнопки управления next и prevИдея такая: при клике на пункт меню срабатывает определенное событие (например, фильтрация на клиенте)...

187
Закрытие меню по клику вне блока на vanila js

Закрытие меню по клику вне блока на vanila js

Помогите реализовать закрытие меню по клику вне блока на чистом Java Script везде примеры только на JQ, я стараюсь максимально обходиться без него

183