使用JavaScript从Array中删除对象怎么做?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (10)
  • 关注 (0)
  • 查看 (107)

如何从数组中删除对象?我希望从“某某阵列”中删除包含名称“Kristian”的对象。例如:

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

我要做到:

someArray = [{name:"John", lines:"1,19,26,96"}];
提问于
用户回答回答于

你可以使用几种方法从其中删除一个项目:

//1
someArray.shift(); // first element removed
//2
someArray = someArray.slice(1); // first element removed
//3
someArray.splice(0,1); // first element removed
//4
someArray.pop(); // last element removed

如果要删除位置上的元素x,使用:

someArray.splice(x,1);

可以使用以下方法从数组中删除一个或多个元素Array.filter(见MDN),如:

someArray = [{name:"Kristian", lines:"2,5,10"},
             {name:"John", lines:"1,19,26,96"},
             {name:"Brian",lines:"3,9,62,36" }];
johnRemoved = someArray.filter(function(el) {
    return el.name !== "John";
});

console.log(JSON.stringify(johnRemoved, null, ' '));
用户回答回答于

在数组上使用拼接函数。指定开始元素的位置和要删除的子序列的长度。

someArray.splice(pos, 1);
用户回答回答于

你可以使用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 = jQuery.grep(someArray , function (value) {
        return value.name != 'Kristian';
});
用户回答回答于

这是一个对我有用的函数:

function removeFromArray(array, value) {
    var idx = array.indexOf(value);
    if (idx !== -1) {
        array.splice(idx, 1);
    }
    return array;
}
用户回答回答于

我已经创建了一个动态函数,它接受Objects Array、key和value,并在删除所需对象后返回相同的数组:

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

        }

完整的例子:

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"));
用户回答回答于

使用Array.filter:

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

问题在于在IE<9 不起作用。但是,你可以包含来自Javascript库的代码。underscore.js它为任何浏览器实现此功能。

用户回答回答于

如所示,“array”是无效的JavaScript语法。花括号{}用于具有属性名称/值对的对象,但用于方括号。[]用于arrays-like于:

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;
   }

你可以尝试$.grep()方法:

someArray = $.grep(someArray,
                   function(o,i) { return o.name === "Kristian"; },
                   true);
用户回答回答于

这个怎么样?

$.each(someArray, function(i){
    if(someArray[i].name === 'Kristian') {
        someArray.splice(i,1);
        return false;
    }
});
用户回答回答于

我建议使用underscore.jssugar.js对于以下常见任务:

// underscore.js
someArray = _.reject(someArray, function(el) { return el.Name === "Kristian"; });

// sugar.js
someArray.remove(function(el) { return el.Name === "Kristian"; });

扫码关注云+社区

领取腾讯云代金券