2016-09-01 11 views
0

Ich habe dieses Array von Objekten:Entfernen von Objekten aus JavaScript-Array

$scope.frequencies = [{Id:124,clientId:3,name:'qqq'}, 
         {Id:589,clientId:1,name:'www'}, 
         {Id:45,clientId:3, name:'eee'}, 
         {Id:567,clientId:1,name:'rrr'}, 
         {Id:45,clientId:3,name:'eee'}, 
         {Id:567,clientId:7,name:'rrr'}] 

ich alle Elemente aus dem Array entfernen müssen oben, außer wo clientId = 3.

Wie kann ich es umsetzen?

+1

zeigen Ihnen, was Sie bisher versucht haben? – Rajesh

+0

Mögliches Duplikat von [JavaScript - Array-Element unter Bedingung entfernen] (http://stackoverflow.com/questions/15995963/javascript-remove-array-element-on-condition) – Rajesh

Antwort

4

nicht entfernen, sondern neu zuweisen mit

var $scope = {}; 
 

 
$scope.frequencies = [{Id:124,clientId:3,name:'qqq'}, 
 
         {Id:589,clientId:1,name:'www'}, 
 
         {Id:45,clientId:3, name:'eee'}, 
 
         {Id:567,clientId:1,name:'rrr'}, 
 
         {Id:45,clientId:3,name:'eee'}, 
 
         {Id:567,clientId:7,name:'rrr'}]; 
 

 
$scope.frequencies = $scope.frequencies.filter(item => item.clientId === 3); 
 

 
console.log($scope.frequencies);

+1

Bitte, Sie sollten OP seine Bemühungen teilen lassen. Es ist ein sehr häufiges Problem, und Sie sollten solche Frage nicht beantworten. – Rajesh

+0

'Array # Spleiß 'für In-Place-Änderungen - einfach sagen, weil Sie ein Array nicht immer ohne unerwünschte Nebenwirkungen zuweisen können –

0

Verwenden Filterverfahren, das auf Basis eines Vergleichs es eine Reihe von Elementen liefert, die den Filter genügen. Auf ES5:

$scope.frequencies.filter(function(element){ 
    return element.clientId == 3; 
}) 

auf neuere, ES6:

$scope.frequencies.filter(element => element.clientId != 3) 

prüfen Filter Dokumentation: filter

2

Sie einfach diesen Code-Schnipsel verwenden können:

$scope.frequencies = $scope.frequencies.filter((item)=> item.Id!=3); 
+0

Warum verwenden Sie' .splice() '? Was ist das 'a' in' a.length'? – nnnnnn

+1

Es war versehentlich, ich bearbeite das, anstelle von a.length ist es $ scope.frequencies.length –

+1

OK, so bringt mich zurück zu "Warum verwenden Sie' .splice() '? Es ist redundant, weil mit params' (0, $ scope.frequencies.length) 'sein * return * -Wert sind alle Elemente aus dem Array, die von' .filter() 'erzeugt werden, so dass Sie das gleiche Ergebnis ohne es erhalten würden ... – nnnnnn

1

In lodash, Sie könnte _.remove(array, [predicate=_.identity]) verwenden.

Entfernt alle Elemente aus array dass predicate kehrt truthy für und gibt ein Array der Elemente entfernt. Das Prädikat wird mit drei Argumenten aufgerufen: (Wert, Index, Array).

var $scope = {}; 
 

 
$scope.frequencies = [{ Id: 124, clientId: 3, name: 'qqq' }, { Id: 589, clientId: 1, name: 'www' }, { Id: 45, clientId: 3, name: 'eee' }, { Id: 567, clientId: 1, name: 'rrr' }, { Id: 45, clientId: 3, name: 'eee' }, { Id: 567, clientId: 7, name: 'rrr' }]; 
 

 
_.remove($scope.frequencies, a => a.clientId !== 3); 
 

 
console.log($scope.frequencies);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

Verwandte Themen