1271 Stimmen

Wie entferne ich ein Element aus einem Array nach Wert?

Gibt es eine Methode, um ein Element aus einem JavaScript-Array zu entfernen?

Angenommen, wir haben ein Array:

var ary = ['three', 'seven', 'eleven'];

Ich möchte etwas Ähnliches tun wie:

removeItem('seven', ary);

Ich habe splice() untersucht, aber das entfernt nur anhand der Positionsnummer, während ich etwas brauche, um ein Element anhand seines Wertes zu entfernen.

2095voto

SLaks Punkte 832502

Sie können die indexOf Methode wie folgt verwenden:

var index = array.indexOf(item);
if (index !== -1) {
  array.splice(index, 1);
}

Hinweis: Sie müssen es für IE8 und darunter anpassen

var array = [1,2,3,4]
var item = 3

var index = array.indexOf(item);
array.splice(index, 1);

console.log(array)

664voto

John Williams Punkte 10750

Ein Einzeiler wird es tun,

var arr = ['three', 'seven', 'eleven'];

// Entferne Element 'seven' aus dem Array
var filteredArray = arr.filter(function(e) { return e !== 'seven' })
//=> ["three", "eleven"]

// In ECMA6 (Pfeilfunktionssyntax):
var filteredArray = arr.filter(e => e !== 'seven')

Dies nutzt die filter Funktion in JS. Es wird in IE9 und höher unterstützt.

Was es macht (aus dem Link zur Dokumentation)

filter() ruft eine bereitgestellte Callback-Funktion einmal für jedes Element in einem Array auf und erstellt ein neues Array aller Werte, für die die Callback eine Wert zurückgibt, der zu true coercet. Die Callback wird nur für Indizes des Arrays aufgerufen, denen Werte zugewiesen wurden; sie wird nicht für Indizes aufgerufen, die gelöscht wurden oder denen nie Werte zugewiesen wurden. Array-Elemente, die den Callback-Test nicht bestehen, werden einfach übersprungen und nicht im neuen Array enthalten.

Also im Grunde genommen ist dies dasselbe wie alle anderen for (var key in ary) { ... } Lösungen, außer dass das for in Konstrukt ab IE6 unterstützt wird.

Grundsätzlich ist filter eine Komfortmethode, die viel besser aussieht (und verketten kann) im Vergleich zum for in Konstrukt (meines Wissens).

554voto

kennebec Punkte 98551

Dies kann eine globale Funktion oder eine Methode eines benutzerdefinierten Objekts sein, wenn es Ihnen nicht erlaubt ist, zu nativen Prototypen hinzuzufügen. Es entfernt alle Elemente aus dem Array, die mit einem der Argumente übereinstimmen.

Array.prototype.remove = function() {
    var what, a = arguments, L = a.length, ax;
    while (L && this.length) {
        what = a[--L];
        while ((ax = this.indexOf(what)) !== -1) {
            this.splice(ax, 1);
        }
    }
    return this;
};

var ary = ['three', 'seven', 'eleven'];

ary.remove('seven');

/* zurückgegebener Wert: (Array)
three,eleven
*/

Um es global zu machen-

function removeA(arr) {
    var what, a = arguments, L = a.length, ax;
    while (L > 1 && arr.length) {
        what = a[--L];
        while ((ax= arr.indexOf(what)) !== -1) {
            arr.splice(ax, 1);
        }
    }
    return arr;
}
var ary = ['three', 'seven', 'eleven'];
removeA(ary, 'seven');

/* zurückgegebener Wert: (Array)
three,eleven
*/

Und um sich um IE8 und darunter zu kümmern-

if(!Array.prototype.indexOf) {
    Array.prototype.indexOf = function(what, i) {
        i = i || 0;
        var L = this.length;
        while (i < L) {
            if(this[i] === what) return i;
            ++i;
        }
        return -1;
    };
}

147voto

vatsal Punkte 3615

Sie können underscore.js verwenden. Es macht wirklich die Dinge einfach.

Zum Beispiel, mit diesem:

var result = _.without(['three','seven','eleven'], 'seven');

Und result wird ['three','eleven'] sein.

In Ihrem Fall ist der Code, den Sie schreiben müssen:

ary = _.without(ary, 'seven')

Es reduziert den Code, den Sie schreiben.

77voto

AmerllicA Punkte 22941

Sie können es auf diese zwei Arten tun:

const arr = ['1', '2', '3', '4'] // wir möchten die Zahl "3" löschen
  1. Der erste Weg:

    arr.indexOf('3') !== -1 && arr.splice(arr.indexOf('3'), 1)
  2. Der zweite Weg (ES6) speziell ohne Veränderung::

    const newArr = arr.filter(e => e !== '3')

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