Ich habe mich gefragt, wie ich eine Methode in Javascript implementieren soll, die alle Elemente eines Arrays entfernt, die eine bestimmte Bedingung löschen. (Am besten ohne jQuery)
Ex.
ar = [ 1, 2, 3, 4 ];
ar.removeIf( function(item, idx) {
return item > 3;
});
Das Obige würde jedes Element im Array durchgehen und alle Elemente return true
für die Bedingung entfernen (im Beispiel Element> 3).
Ich fange gerade mit Javascript an und habe mich gefragt, ob jemand einen kurzen, effizienten Weg kennt, um dies zu erreichen.
- Update -
Es wäre auch großartig, wenn die Bedingung auch für Objekteigenschaften funktionieren könnte.
Ex.
ar = [ {num:1, str:"a"}, {num:2, str:"b"}, {num:3, str:"c"} ];
ar.removeIf( function(item, idx) {
return item.str == "c";
});
Wo würde der Artikel entfernt werden, wenn item.str == "c"
- update2 -
Es wäre schön, wenn auch die Indexbedingungen funktionieren könnten.
Ex.
ar = [ {num:1, str:"a"}, {num:2, str:"b"}, {num:3, str:"c"} ];
ar.removeIf( function(item, idx) {
return idx == 2;
});
quelle
i
den Rückruf nicht als zweiten Parameter übergebenthis.length
als dritter Parameter, wenn Sie eine Neigung hatten).Sie können die Array-Filtermethode verwenden .
Der Code würde folgendermaßen aussehen:
ar = [1, 2, 3, 4]; ar = ar.filter(item => !(item > 3)); console.log(ar) // [1, 2, 3]
quelle
!(item > 3)
in die menschliche Sprache übersetzen, wird es seinitem <= 3
.ar1 = [1, 2, 3, 4]; ar2 = ar1; ar1 = ar1.filter(item => !(item > 3)); console.log(ar1); console.log(ar2);
Sie können verwenden
Array.filter()
, was das Gegenteil bewirkt:ar.filter(function(item, idx) { return item <= 3; });
quelle
<=
.for
Schleife schreiben .,Array.filter
ist wahrscheinlich schneller als das manuelle Ausspleißen des angegebenen Arrays.Sie können lodash.remove verwenden
var array = [1, 2, 3, 4]; var evens = _.remove(array, function(n) { return n % 2 == 0; }); console.log(array); // => [1, 3] console.log(evens); // => [2, 4]
quelle
Ich liebe diese Art von Fragen und nur eine andere Version von mir ... :)
Array.prototype.removeIf = function(expression) { var res = []; for(var idx=0; idx<this.length; idx++) { var currentItem = this[idx]; if(!expression(currentItem)) { res.push(currentItem); } } return res; } ar = [ 1, 2, 3, 4 ]; var result = ar.removeIf(expCallBack); console.log(result); function expCallBack(item) { return item > 3; }
quelle
Schreiben Sie einfach das folgende Beispiel, wenn die Bedingung auch für Objekteigenschaften funktionieren könnte
var ar = [ {num:1, str:"a"}, {num:2, str:"b"}, {num:3, str:"c"} ]; var newArray = []; for (var i = 0, len = ar.length; i<len; i++) { if (ar[i].str == "b") {newArray.push(ar[i]);}; }; console.log(newArray);
Siehe das Beispiel Live-Beispiel
quelle
Machen Sie es zu einem Einzeiler mit Pfeilfunktion:
ar = ar.filter(i => i > 3);
quelle