793 Stimmen

Objekt aus Array entfernen mit JavaScript

Wie kann ich ein Objekt aus einem Array entfernen? Ich möchte das Objekt entfernen, das den Namen Kristian von someArray . Zum Beispiel:

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

Ich möchte etwas erreichen:

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

1033voto

KooiInc Punkte 111454

Sie können verschiedene Methoden verwenden, um Elemente aus einem Array zu entfernen:

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

Wenn Sie das Element an der Position entfernen möchten x verwenden:

someArray.splice(x, 1);

Oder

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

Antwort auf den Kommentar von @chill182 : Sie können ein oder mehrere Elemente aus einem Array entfernen, indem Sie Array.filter ou Array.splice kombiniert mit Array.findIndex (siehe MDN ).

Siehe dies Stackblitz-Projekt oder den folgenden Ausschnitt:

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

318voto

Jon Punkte 411383

Die saubere Lösung wäre die Verwendung von Array.filter :

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

Das Problem dabei ist, dass es funktioniert nicht auf IE < 9. Sie können jedoch Code aus einer Javascript-Bibliothek einfügen (z. B. unterstrich.js ), die dies für jeden Browser implementiert.

149voto

psyho Punkte 6984

Ich empfehle die Verwendung von lodash.js oder sugar.js für allgemeine Aufgaben wie diese:

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

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

In den meisten Projekten ist es sehr nützlich, eine Reihe von Hilfsmethoden zu haben, die von Bibliotheken wie diesen bereitgestellt werden.

129voto

Saeid Punkte 1199

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

Es wird entfernt John !

94voto

Allan Taylor Punkte 1015

Wie wäre es damit?

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X