【问题标题】:findIndex() returns as -1 and not correct index numberfindIndex() 返回 -1 且索引号不正确
【发布时间】:2019-12-14 06:32:25
【问题描述】:

为此而苦苦挣扎。以前可以用,不知道为什么现在不行...

我有一个 ToDo 应用程序,其中包含一个表单,有两个输入 - 一个用于 name。还有一个用于 url。

我应该能够编辑任何输入值。然后在本地存储中保存/更新更新的数组对象。

如果我单击我的编辑按钮,而不更改输入值,则返回正确的索引号(0 或 1)。

但是如果我改变一个输入值。然后点击编辑值,返回-1。 因此,我的函数的其余部分不起作用,因为我的 JS 没有找到正确的索引来更新对象。

这是代码的 sn-p。我做错了什么?

bookmarksArray: [
    {
        "name": "jane",
        "url": "http://www.jane.co.uk/"
    },
    {
        "name": "mark",
        "url": "http://www.google.com"
    }
]

  // UPDATE/EDIT EXISTING BOOKMARK
  list.addEventListener('click', event => {
    if (event.target.classList.contains('js-edit-url')) {
      const editName = event.target.parentElement.name.value;
      const editURL = event.target.parentElement.url.value;
      let constUpdatedOBj = {name: editName, url: editURL};

      const objIndex = bookMarksArray.findIndex(obj => obj.name === editName);

      console.log('editName', editName);
      console.log('editURL', editURL);
      console.log('objIndex', objIndex);

      bookMarksArray[objIndex] = constUpdatedOBj;
      window.localStorage.setItem("bookMarksArray", JSON.stringify(bookMarksArray));
    }
  });

【问题讨论】:

  • 我们应该知道单击事件处理函数开头的bookmarksArray (以您当前的示例为例)的值,以正确帮助您(控制台日志显示什么?)。此外,如果您尝试编辑名称值,则通常找不到该项目,因为您按名称搜索它并且它刚刚更改(在这种情况下,添加 id 字段将是强制性的)

标签: javascript arrays object local-storage


【解决方案1】:

如果您以这样的数组开始,这将按我的预期工作:

bookmarksArray: [
    {
        "name": "jane",
        "url": "http://www.jane.co.uk/"
    },
    {
        "name": "mark",
        "url": "http://www.google.com"
    }
];

然后在tony 的输入中编辑名称mark,这基本上就是你得到的:

const objIndex = bookMarksArray.findIndex(obj => obj.name === 'tony');

bookmarksArray 中不存在“tony”,因此 findIndex 将返回 -1。

您需要的是这些书签上的 id:

bookmarksArray: [
    {
        "id": 1,
        "name": "jane",
        "url": "http://www.jane.co.uk/"
    },
    {
        "id": 2,
        "name": "mark",
        "url": "http://www.google.com"
    }
];

然后让您的findIndex 根据 id 查找正确的记录:

const bookmarkId = event.target.parentElement.id.value;
const objIndex = bookMarksArray.findIndex(obj => obj.id === bookmarkId);

【讨论】:

  • 非常感谢@nerdy 野兽,这真的很有帮助!
猜你喜欢
  • 2017-07-31
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 2015-08-16
  • 2019-11-21
相关资源
最近更新 更多