439 Stimmen

Entfernen Sie alle Elemente, die in einem anderen Array enthalten sind

Ich suche nach einer effizienten Möglichkeit, um alle Elemente aus einem JavaScript-Array zu entfernen, wenn sie in einem anderen Array vorhanden sind.

// Wenn ich dieses Array habe:
var myArray = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];

// und dieses:
var toRemove = ['b', 'c', 'g'];

Ich möchte auf myArray arbeiten, um es in diesem Zustand zu lassen: ['a', 'd', 'e', 'f']

Mit jQuery benutze ich grep() und inArray(), was gut funktioniert:

myArray = $.grep(myArray, function(value) {
    return $.inArray(value, toRemove) < 0;
});

Gibt es eine reine JavaScript-Methode, um dies ohne Schleifen und Aufspalten zu tun?

16voto

Eggon Punkte 1577

Wie wäre es mit dem einfachsten möglichen:

var myArray = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
var toRemove = ['b', 'c', 'g'];

var myArray = myArray.filter((item) => !toRemove.includes(item));
console.log(myArray)

15voto

Crenshinibon Punkte 187

Lodash hat auch eine Hilfsfunktion dafür: https://lodash.com/docs#difference

10voto

Rune Punkte 149

Ich habe es gerade implementiert als:

Array.prototype.exclude = function(list){
        return this.filter(function(el){return list.indexOf(el)<0;})
}

Verwendung als:

myArray.exclude(toRemove);

8voto

MarcoL Punkte 9809

Wenn Sie die neuen ES5-Funktionen wie filter nicht verwenden können, denke ich, dass Sie mit zwei Schleifen feststecken:

for( var i =myArray.length - 1; i>=0; i--){
  for( var j=0; j

7voto

Craciun Ciprian Punkte 107

Sie können _.differenceBy von lodash verwenden

const myArray = [
  {name: 'deepak', place: 'bangalore'}, 
  {name: 'chirag', place: 'bangalore'}, 
  {name: 'alok', place: 'berhampur'}, 
  {name: 'chandan', place: 'mumbai'}
];
const toRemove = [
  {name: 'deepak', place: 'bangalore'},
  {name: 'alok', place: 'berhampur'}
];
const sorted = _.differenceBy(myArray, toRemove, 'name');

Beispielcode hier: CodePen

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