#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));
});