【问题标题】:How do i remove an object in my case [duplicate]在我的情况下如何删除对象[重复]
【发布时间】:2014-08-25 03:07:19
【问题描述】:

我正在尝试根据 obj id 删除一个对象。

我有类似的东西

var array =[];
var id =3;

array [
   {
    id:'1',
    title:'test'
   },
   {
    id:'2',
    title:'tes2'
   },
   {
    id:'3',
    title:'tes3'
   }
]

如何根据 id 3 删除对象。谢谢!

【问题讨论】:

  • array.splice(id-1,1);
  • 提名重新打开 - 尽管Array.prototype.filter 仍在使用中,但查找元素与删除元素是不同的操作。

标签: javascript


【解决方案1】:

使用filter():

array = array.filter( 
          function( item ) {
            return item.id != id;
          }
        );

或者,就地修改数组:

for ( i = 0; i < array.length; ++i )
{
  if (array[i].id == id)
  {
    array.splice(i, 1);
    break;
  }
}

【讨论】:

  • 这不是删除数组;这将返回一个没有该项目的新数组。虽然它可以工作,但它会更慢并且消耗的内存比需要的多。
  • 是的。添加了就地修改版本。
  • 进入 ES6:var idx = array.findIndex(obj =&gt; obj.id === 3); if (idx !== -1) array.splice(idx, 1);
【解决方案2】:

作为先前发布的答案的替代方案,如果您或您的用户使用的是最新版浏览器,则可以使用以下内容:

function removeByPropertyEquals(haystack, needleProp, needleVal) {
    haystack.forEach(function (obj, index) {
        if (obj[needleProp] === needleVal) {
            return index;
        }
    });
    return -1;
}

var id = 3,
    array = [{
        id: '1',
        title: 'test'
    }, {
        id: '2',
        title: 'tes2'
    }, {
        id: '3',
        title: 'tes3'
    }];

console.log( array );

array.splice(removeByPropertyEquals(array, 'id', '3'), 1);

console.log( array );

JS Fiddle demo.

参考资料:

【讨论】:

    猜你喜欢
    • 2014-07-31
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    相关资源
    最近更新 更多