2016-09-08 2 views
1

Ich habe vor einer Weile mit linq.js gestartet, und fand es sehr nützlich, aber es gibt ein Problem, das ich wirklich nicht irgendwie lösen kann. Ich verwende eckig, und ich habe einen einfachen JSON-Array mit der folgenden Struktur:Entfernen von Element aus Objekt-Array mit linq.js

[ 
    { id: 1, name: 'John', age: 20}, 
    { id: 2, name: 'Josh', age: 34}, 
    { id: 3, name: 'Peter', age: 32}, 
    { id: 4, name: 'Anthony', age: 27}, 
] 

Ich bin für die besten suchen (oder zumindest eine Arbeits) Beispiel weicht könnte mir helfen, zu verstehen, wie ein Element entfernen von diesem Array von der id Eigenschaft. Ich habe einige Beispiele mit einfachen Array gefunden (aber nicht mit JSON-Elementen), die mir nicht zu viel geholfen haben.

ich die folgende Funktion haben das Entfernen Teil zu tun:

this.removePerson = function(id) { 
    //here's how I access the array 
    vm.people 
} 

Antwort

2

Mit linq.js, müssen Sie die Daten konvertieren ToDictionary, erhält die gewünschten Artikel mit Single von enumerable und Entferne den Gegenstand.

Dann müssen Sie das Array erneut aus dem Wörterbuch über Enumerable und wählen Sie Array.

Et voilà!

var data = [{ id: 1, name: 'John', age: 20}, { id: 2, name: 'Josh', age: 34}, { id: 3, name: 'Peter', age: 32}, { id: 4, name: 'Anthony', age: 27}], 
 
    enumerable = Enumerable.From(data), 
 
    dictionary = enumerable.ToDictionary(); 
 

 
dictionary.Remove(enumerable.Single(s => s.id === 3)); 
 
console.log(dictionary.ToEnumerable().Select(s => s.Key).ToArray());
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/linq.js"></script>

1
//assuming your sample data 
    var vm = {}; 
    vm.people = [ 
     { id: 1, name: 'John', age: 20}, 
     { id: 2, name: 'Josh', age: 34}, 
     { id: 3, name: 'Peter', age: 32}, 
     { id: 4, name: 'Anthony', age: 27}, 
    ]; 

    //just loop through and delete the matching object 
    this.removePerson = function(id) { 
     for(var i=0;i<vm.people.length;i++){ 
      if(vm.people[i].id == id){ 
      vm.people.splice(i, 1);//removes one item from the given index i 
      break; 
      } 
     } 
    }; 

JSBin here

+0

vielen Dank für Ihre Lösung, sehr nützlich :) aber ich möchte das Problem mit linq.js Wenn es möglich zu lösen, aber wenn niemand bald reagiert werde ich akzeptieren Ihre Antwort, wie es mein Problem gelöst hat, auch wenn es anders geht. –

+0

ist es egal, in ihren Methoden werden sie etwas tun, was dem ähnlich ist, was ich oben kodiert habe. Für komplexe Funktionalitäten/oder browserabhängigen Code sollten wir uns an Bibliotheken halten. Ich sehe das Problem jedoch nicht . –

+0

Nun, Sie könnten Recht haben, denn dieses kleine Stück Code mit einer Bibliothek ist nicht notwendig –