Javascript:在对象的函数调用中从数组中删除对象

时间:2014-09-18 15:15:23

标签: javascript

不太确定如何表达这个问题(我确信以前曾以某种形式提出过这个问题)。

我的问题基本上如下所示(通过一些写得不好的伪javascript代码):

var list = []
for (i to somenumber)
    list.push(new myObject);

list.foreach(function(item){
    if (item.name === 'WhatIAmLookingFor')
        item.delete() <--- This needs to remove the object from list
}

因为我的惊人代码暗示我希望能够通过调用列表中对象的函数来从列表中删除该项。

很抱歉,如果这是一个无知的问题,但我无法弄清楚如何做到这一点。

1 个答案:

答案 0 :(得分:2)

使用filter代替删除项目,而不是只保留“好”项目。

var list = [
  { name: 'foo' },
  { name: 'bar' },  
  { name: 'removeMe' },  
  { name: 'baz' }
];

list = list.filter(function(item) {
  return item.name != 'removeMe'
});

document.write(JSON.stringify(list))

要删除“由内而外”的元素,例如element.removeFrom(list),您需要array.splice

obj = function(name) {
  
  this.name = name;
  
  this.removeFrom = function(lst) {
    for (var i = 0; i < lst.length; ) {
    	if (lst[i].name == this.name)
          lst.splice(i, 1);
        else
          i++;
    }
  }
}
  
a = new obj('a');
b = new obj('b');
c = new obj('c');
x = new obj('remove');

list = [a, b, c, x, x, a, b, c, x]

x.removeFrom(list)

document.write(JSON.stringify(list))