.map() 只返回数组中的最后一个对象

卡特琳·桑德鲁

我正在尝试使用浏览器localStorage来存储array对象。每个对象都有两个keys: namequote这些值来自一个form元素。当我重新加载 时browser,我想map遍历数组并显示所有现有条目,当我从表单元素添加另一个条目时,也显示该条目。

我使用JSON.parseJSON.stringify将数据转换到string,然后再返回到array我正在使用document.createElement并将其附加到特定元素中的父级和map每个对象值array

当我console.log从数组localStorageJSON.parse,它看起来是这样的:

[
{name: "sda", quote: "asd"}
{name: "fff", quote: "dsa"}
{name: "", quote: ""}
{name: "ferfe", quote: "fre"}
{name: "yhtyh", quote: "grtg"}
{name: "fdf", quote: "ds"}
{name: "fdf", quote: "ds"}
]

当我重新加载浏览器maparray,它仅返回最后一个元素,我dont't知道为什么。

const process = () => {
    const getList = JSON.parse(localStorage.getItem('key_name')).map(item => JSON.parse(item));
    console.log(getList)
    const cite = document.createElement('cite');
    const p = document.createElement('p');

    document.getElementById('quote_list').appendChild(cite);
    document.getElementById('quote_list').appendChild(p);

    return(
      getList.map(item => {
        cite.innerHTML = item.quote;
        p.innerHTML = item.name;
      })
    )
  }

  const setData = () => {
    let getList = JSON.parse(localStorage.getItem('key_name'));
    const quote = document.quoteForm.quote.value;
    const name = document.quoteForm.name.value;
    const data = {name: name, quote: quote};
    const JsonData = JSON.stringify(data);
    localStorage.setItem('entry', JsonData);
    getList.push(JsonData);
    localStorage.setItem('key_name', JSON.stringify(getList));
    process();
  }

  window.addEventListener('onload', process());

如果我从表单元素中添加另一个条目,它就可以正常工作。如果我重新加载浏览器,它只会返回数组中的最后一项。setData()就是当我点击引发submit buttonform

查理特

问题是您每次循环迭代都会覆盖 2 个元素的 innerHTML,map()并且只看到最后一个

我的猜测是您希望每个项目都有新元素

尝试改变:

 getList.map(item => {
    cite.innerHTML = item.quote;
    p.innerHTML = item.name;
  }) 

const list = document.getElementById('quote_list');

getList.forEach(item => {
  const cite = document.createElement('cite');
  const p = document.createElement('p');
  cite.innerHTML = item.quote;
  p.innerHTML = item.name;
  list.appendChild(cite);
  list.appendChild(p)

})

注意:window.addEventListener('onload', process());应该是:

window.addEventListener('onload', process);
                                  // ^^ function reference not 
                                  // result of calling function

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我将如何遍历Javascript中的数组,添加一个单词,然后返回一个数组(不使用map)?

只返回ArrayList中的最后一个元素

为什么只在Java代码中得到数组的最后一个对象?

为什么Swift Playground中的map(_ :)返回一个String而不是一个元组?

如何只修改react .map函数中的一个元素?

检查它是否是map()函数内部数组中的最后一个元素

我的Hashmap对象值列表对象仅返回我放置在ArrayList <Map <String,Object >>>();中的最后一个对象;

在React中使用map返回一个等于最后一个元素的数组

如何只选择.map()的一个元素?

在每个对象上使用最后一个索引的Angular / TypeScript Map

forEach和map函数迭代对象的嵌套json数组并创建一个新数组

Dispatcher 只从数组中绘制最后一个对象

使用 map 返回多维数组中的第一个索引

.map 在另一个数组中的对象数组上:类型错误:无法读取未定义的属性“map”

为什么 _.map 只返回最后一项?

reducer 只返回最后一个对象

如何只迭代 List<Map<String, Object>> 中的一个值

XLSX 只写入数组中的最后一个索引

使用 map 为每个对象返回一个带有句子的新数组

ng For 循环只返回数组中的最后一个值

删除reduce和map中的一个属性(数组)?

从 Map 对象的副本中删除一个键

反应 .map 一个对象

Map() 函数只返回最后一个值?

Laravel:在map函数中合并一个数组

如何在 JSX 中只链接 .map 数组的一个元素

在一个“.map”中为数组的每个元素获取多个对象

每次只从这个 map 方法中获取最后一个元素

如何从 map 函数中的 forEach 返回一个 div?