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

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

我想实现:

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

当前回答

如果你在数组中的对象上没有任何你知道的属性(或者可能是唯一的),但是你有一个你想要删除的对象的引用,你可以执行下面unregisterObject方法中的操作:

let registeredObjects = []; function registerObject(someObject) { registeredObjects.push(someObject); } function unregisterObject(someObject) { registeredObjects = registeredObjects.filter(obj => obj !== someObject); } let myObject1 = {hidden: "someValue1"}; // Let's pretend we don't know the hidden attribute let myObject2 = {hidden: "someValue2"}; registerObject(myObject1); registerObject(myObject2); console.log(`There are ${registeredObjects.length} objects registered. They are: ${JSON.stringify(registeredObjects)}`); unregisterObject(myObject1); console.log(`There are ${registeredObjects.length} objects registered. They are: ${JSON.stringify(registeredObjects)}`);

其他回答

使用javascript的splice()函数。

这可能会有帮助:http://www.w3schools.com/jsref/jsref_splice.asp

我做了一个动态函数,以对象数组,键和值,并返回相同的数组后删除所需的对象:

function removeFunction (myObjects,prop,valu)
        {
             return myObjects.filter(function (val) {
              return val[prop] !== valu;
          });

        }

完整示例:DEMO

var obj = {
            "results": [
              {
                  "id": "460",
                  "name": "Widget 1",
                  "loc": "Shed"
              }, {
                  "id": "461",
                  "name": "Widget 2",
                  "loc": "Kitchen"
              }, {
                  "id": "462",
                  "name": "Widget 3",
                  "loc": "bath"
              }
            ]
            };


        function removeFunction (myObjects,prop,valu)
        {
             return myObjects.filter(function (val) {
              return val[prop] !== valu;
          });

        }


console.log(removeFunction(obj.results,"id","460"));

你所显示的“数组”是无效的JavaScript语法。花括号{}表示具有属性名/值对的对象,而方括号[]表示数组,就像这样:

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

在这种情况下,您可以使用.splice()方法删除一个项。要删除第一项(索引0),如下所示:

someArray.splice(0,1);

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

如果你不知道索引,但想通过数组搜索找到名称为“Kristian”的项来删除,你可以这样做:

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

编辑:我刚刚注意到你的问题被标记为“jQuery”,所以你可以尝试$.grep()方法:

someArray = $.grep(someArray,
                   function(o,i) { return o.name === "Kristian"; },
                   true);

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

//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 );

这个概念使用剑道网格

var grid = $("#addNewAllergies").data("kendoGrid");

var selectedItem = SelectedCheckBoxList;

for (var i = 0; i < selectedItem.length; i++) {
    if(selectedItem[i].boolKendoValue==true)
    {
        selectedItem.length= 0;
    }
}