Объект JavaScript работает не так, как ожидалось

#javascript

#javascript

Вопрос:

Я получаю элементы localstorage, а затем добавляю их в объект. Проблема в том, что когда я пытаюсь получить его, это дает мне только один результат, но их должно быть шесть.

 (
  JSON.parse(localStorage.getItem("fav"))
).forEach(function (e) {
  adUrl = {
    "name": e.name,
    "img": e.img,
  }
});

Object.keys(adUrl).forEach(function (key){
  console.log(adUrl[key]);
});
  

Комментарии:

1. ИМХО, Array.map это лучший способ отобразить новые объекты вместо forEach . Вы отбрасываете все новые объекты, которые вы создаете, за исключением последнего

Ответ №1:

ДА. Он перебирает все содержимое fav и каждый раз перезаписывает adUrl . После того, как с этим будет покончено, эта часть

             Object.keys(adUrl).forEach(function (key) {
                console.log(adUrl[key]);
            });
  

выполняется один раз.

Поместите его внутрь большего forEach цикла.

Комментарии:

1. Спасибо за ответ… можете ли вы показать мне пример

2. Просто переместите `})` непосредственно перед Object.keys(//..etc. в конец фрагмента.

Ответ №2:

Просто убедитесь, что вы добавляете объект на каждой итерации в новый массив, вот так:

 let myArr = [];
(JSON.parse(localStorage.getItem("fav"))).forEach(function (e) {
  adUrl= {
    "name":e.name,
    "img":e.img,
  }
  myArr.push(adUrl);
});

myArr.forEach(function (adUrl){
  console.log(adUrl);
});
  

Ответ №3:

Используйте Array.map для сопоставления элементов из localStorage с новыми объектами в массив.

В вашем коде он перезаписывается с каждой итерацией, и в итоге вы получите последний созданный вами объект.

 const addUrl = (JSON.parse(localStorage.getItem("fav"))).map(({name, img}) => ({name, img}));
addUrl.forEach(obj => {
       console.log(...Object.values(obj));
});