如何从数组中删除对象? 我希望从someArray中删除包含名称Kristian的对象。例如:

someArray = [{name:"Kristian", lines:"2,5,10"},
             {name:"John", lines:"1,19,26,96"}];

我想实现:

someArray = [{name:"John", lines:"1,19,26,96"}];

当前回答

这个答案

for (var i =0; i < someArray.length; i++)
   if (someArray[i].name === "Kristian") {
      someArray.splice(i,1);
   }

对于满足条件的多个记录不工作。如果您有两个这样的连续记录,则只删除第一个记录,跳过另一个记录。你必须使用:

for (var i = someArray.length - 1; i>= 0; i--)
   ...

代替。

其他回答

干净的解决方案是使用Array.filter:

var filtered = someArray.filter(function(el) { return el.Name != "Kristian"; }); 

问题是它不能在IE < 9上工作。然而,你可以包括来自Javascript库(例如:underscore.js)的代码,为任何浏览器实现这一点。

你可以使用array.filter()。

如。

        someArray = [{name:"Kristian", lines:"2,5,10"},
                     {name:"John", lines:"1,19,26,96"}];

        someArray = someArray.filter(function(returnableObjects){
               return returnableObjects.name !== 'Kristian';
        });

        //someArray will now be = [{name:"John", lines:"1,19,26,96"}];

箭头功能:

someArray = someArray.filter(x => x.name !== 'Kristian')

最简单的解决方案是创建一个映射,按名称存储每个对象的索引,如下所示:

//adding to array
var newPerson = {name:"Kristian", lines:"2,5,10"}
someMap[ newPerson.name ] = someArray.length;
someArray.push( newPerson );

//deleting from the array
var index = someMap[ 'Kristian' ];
someArray.splice( index, 1 );

ES2015

let someArray = [
               {name:"Kristian", lines:"2,5,10"},
               {name:"John", lines:"1,19,26,96"},
               {name:"Kristian", lines:"2,58,160"},
               {name:"Felix", lines:"1,19,26,96"}
            ];

someArray = someArray.filter(person => person.name != 'John');

它会除掉约翰!

someArray = jQuery.grep(someArray , function (value) {
        return value.name != 'Kristian';
});