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

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

我想实现:

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

当前回答

Splice (i, 1),其中i是数组的增量索引,将删除对象。 但是请记住,splice也会重置数组长度,所以要注意'undefined'。用你的例子,如果你删除了“Kristian”,那么在循环中的下一次执行中,i将是2,但someArray将是1的长度,因此,如果你试图删除“John”,你会得到一个“undefined”错误。解决这个问题的一个方法是使用单独的计数器来跟踪要删除的元素的索引。

其他回答

这个答案

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--)
   ...

代替。

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

它会除掉约翰!

你可以这样过滤:

const someArray = [{ 名称:“克里斯蒂安”, 行:“2、5、10” }, { 名称:“约翰”, :“96”1,19日,26日 } ]; var filtered = someArray.filter((el) => el.name != "Kristian"); console.log(过滤)

你可以使用以下几种方法从数组中删除项:

//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
//5
someArray = someArray.slice(0, someArray.length - 1); // last element removed
//6
someArray.length = someArray.length - 1; // last element removed

如果你想移除x位置的元素,使用:

someArray.splice(x, 1);

Or

someArray = someArray.slice(0, x).concat(someArray.slice(-x));

回复@chill182的评论:您可以使用array从数组中删除一个或多个元素。过滤器或数组。拼接结合数组。findIndex(参见MDN)。

请看这个Stackblitz项目或下面的代码片段:

// non destructive filter > noJohn = John removed, but someArray will not change let someArray = getArray(); let noJohn = someArray.filter( el => el.name !== "John" ); log(`let noJohn = someArray.filter( el => el.name !== "John")`, `non destructive filter [noJohn] =`, format(noJohn)); log(`**someArray.length ${someArray.length}`); // destructive filter/reassign John removed > someArray2 = let someArray2 = getArray(); someArray2 = someArray2.filter( el => el.name !== "John" ); log("", `someArray2 = someArray2.filter( el => el.name !== "John" )`, `destructive filter/reassign John removed [someArray2] =`, format(someArray2)); log(`**someArray2.length after filter ${someArray2.length}`); // destructive splice /w findIndex Brian remains > someArray3 = let someArray3 = getArray(); someArray3.splice(someArray3.findIndex(v => v.name === "Kristian"), 1); someArray3.splice(someArray3.findIndex(v => v.name === "John"), 1); log("", `someArray3.splice(someArray3.findIndex(v => v.name === "Kristian"), 1),`, `destructive splice /w findIndex Brian remains [someArray3] =`, format(someArray3)); log(`**someArray3.length after splice ${someArray3.length}`); // if you're not sure about the contents of your array, // you should check the results of findIndex first let someArray4 = getArray(); const indx = someArray4.findIndex(v => v.name === "Michael"); someArray4.splice(indx, indx >= 0 ? 1 : 0); log("", `someArray4.splice(indx, indx >= 0 ? 1 : 0)`, `check findIndex result first [someArray4] = (nothing is removed)`, format(someArray4)); log(`**someArray4.length (should still be 3) ${someArray4.length}`); // -- helpers -- function format(obj) { return JSON.stringify(obj, null, " "); } function log(...txt) { document.querySelector("pre").textContent += `${txt.join("\n")}\n` } function getArray() { return [ {name: "Kristian", lines: "2,5,10"}, {name: "John", lines: "1,19,26,96"}, {name: "Brian", lines: "3,9,62,36"} ]; } <pre> **Results** </pre>

你所显示的“数组”是无效的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);