2015-06-23 6 views
7

Ho un array di oggetti come questo:Jquery serie del filtro di oggetto con ciclo

myArray = [ 
{label: "a", 
value: "100"}, 
{label: "b", 
value: "101"}, 
{label: "c", 
value: "102"} 
... 

voglio filtrare in questo modo:

myArrayFiltered = myArray.filter(function(v){ 
    return v["value"] == "101" || v["value"] == "102"}); 

che restituirà

myArrayFiltered = [ 
{label: "b", 
value: "101"}, 
{label: "c", 
value: "102"}] 

in questo esempio ma voglio fare il filtro con una matrice di valori. Come lo posso fare ?

risposta

5

Basta controllare se il valore si sta filtrando è nella propria matrice

myArrayFiltered = myArray.filter(function(v){ 
    return ["102", "103"].indexOf(v.value) > -1; 
}); 
+0

Questo funziona. Non dimenticare di aggiungere); alla fine. Infatti non stavo usando un array per filtrare ma una serie di oggetti come il primo array. L'ho convertito in un array per ottenere solo i valori e quindi utilizzare questa soluzione. – GtAntoine

+0

@GtAntoine Oops! Grazie –

0

Si potrebbe utilizzare il metodo .some all'interno del vostro filtro:

var requiredValues = ["101", "102", "103"]; 
myArrayFiltered = myArray.filter(function(v){ 
    return requiredValues.some(function(value) { 
     return value === v.value; 
    }); 
}); 
+0

È possibile passare 'requiredValues' come secondo parametro in '.filter (callback [, thisArg])' e quindi usare 'this.indexOf()'. Quindi non dovrai fare affidamento su un parametro "globale" - [Array.prototype.filter()] (https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) – Andreas

+0

@Andreas Certamente possibile. Preferisco questo approccio, poiché sembra innaturale passare una variabile e farla passare come * context *, quindi lascerò questo così com'è. – CodingIntrigue

0
var arrValues = ["101", "102"]; 



var result = getData(arrValues,"102") 



function getData(src, filter) { 
     var result = jQuery.grep(src, function (a) { return a == filter; }); 
     return result; 
    }