首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的JSON只能删除一个元素

我的JSON只能删除一个元素
EN

Stack Overflow用户
提问于 2013-12-05 21:26:15
回答 3查看 75关注 0票数 1

我的删除功能出了问题。第一个删除是没有问题的,但如果我尝试删除或添加另一个之后,它就不工作了。我想一定是某物。用我的数组,但是什么?我看到了.live函数,但没有起作用。

代码语言:javascript
复制
      var data = [{
          title: "40 männlich Jungfrau sucht",
          director: "Judd Apatow",
          year: 2005,
          playTime: 116,
          fsk: 14
      }, {
          title: "Pulp Ficiton",
          director: "Quentin Tarantino",
          year: 1994,
          playTime: 148,
          fsk: 16
      }, {
          title: "Inglourious Basterds",
          director: "Quentin Tarantino",
          year: 2009,
          playTime: 148,
          fsk: 16
      }];

      $('button').click(function () {
          for (var e in data) {
              if (data[e].title == $(this).attr('value')) {
                  delete data[e];
              }
          }

          drawTable(data);
      });
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-05 21:29:55

问题在于,要给出一个索引,而不是实际的对象,即:

代码语言:javascript
复制
for (i in data) console.log(i); //  0, 1, 2

因此,在第一个删除之后,下一个索引就不再有效了。为了解决这个问题,您可以向后迭代:

代码语言:javascript
复制
for (var i = data.length-1 ; i>=0 ; i--) {
    if (data[i].title == $(this).attr('value')) {
        delete data[i];
    }
}
票数 2
EN

Stack Overflow用户

发布于 2013-12-05 21:30:06

您有一个对象数组,不要使用for in循环进行迭代。您的delete也正在删除整个数组索引,如果需要,请使用splice,如果不是,则针对键:

代码语言:javascript
复制
for (var i = 0; i < data.length; i++) {
    if (data[i].title == $(this).attr('value')) {
        data.splice(i, 1); //to delete whole array chunk
        delete data[i].title; //delete field
    }
}
票数 2
EN

Stack Overflow用户

发布于 2013-12-05 22:10:46

首先,您应该保留要删除的项的索引,中断循环,然后删除。我用的是分裂。不要在循环中直接删除。

其次,你有一个拼写错误,如果这是你想要删除的错误的话,那么我就会在低俗小说中删除

这段代码起作用

代码语言:javascript
复制
  <button value="Pulp Fiction">Button</button>

  var data = [{
      title: "40 männlich Jungfrau sucht",
      director: "Judd Apatow",
      year: 2005,
      playTime: 116,
      fsk: 14
  }, {
      title: "Pulp Fiction",
      director: "Quentin Tarantino",
      year: 1994,
      playTime: 148,
      fsk: 16
  }, {
      title: "Inglourious Basterds",
      director: "Quentin Tarantino",
      year: 2009,
      playTime: 148,
      fsk: 16
  }];

  $('button').click(function () {
      var indexToDelete = 4;
      for (var e in data) {

          if (data[e].title.toString() == $(this).attr('value')) {
              indexToDelete = e;
              break;
          }
      }
      data.splice(indexToDelete,1);
      console.log(data);
  });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20411071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档