2015-11-07 18 views
5

È necessario filtrare un array in base a un altro array. C'è una funzione utile in knock out? altro ho bisogno di andare con javascriptArray filtro non in un'altra matrice

Primo:

var obj1 = [{ 
    "visible": "true", 
    "id": 1 
}, { 
    "visible": "true", 
    "id": 2 
}, { 
    "visible": "true", 
    "id": 3 
}, { 
    "Name": "Test3", 
    "id": 4 
}]; 

Secondo:

var obj2 = [ 2,3] 

Ora ho bisogno di filtrare obj1 sulla base di obj2 e restituire gli articoli da obj1 che non sono in omittng obj2 2 , 3 nei dati di cui sopra (confronto in oggetto 1 Id)

uscita:

risposta

10

Si può semplicemente scorrere obj1 utilizzando filter e utilizzare indexOf su obj2 per vedere se esiste. indexOf restituisce -1 se il valore non è nell'array e filter include l'elemento quando il callback restituisce true.

var arr = obj1.filter(function(item){ 
    return obj2.indexOf(item.id) === -1; 
}); 
0

Per creare l'array di uscita, creare una funzione che iterare obj1 e compilare un nuovo array a seconda che l'id di ogni obj nell'iterazione esiste in obj2.

var obj1 = [{ 
    "visible": "true", 
    "id": 1 
}, { 
    "visible": "true", 
    "id": 2 
}, { 
    "visible": "true", 
    "id": 3 
}, { 
    "Name": "Test3", 
    "id": 4 
}]; 

var obj2 = [2,3] 

var select = function(arr) { 
    var newArr = []; 
    obj1.forEach(function(obj) { 
    if obj2.indexOf(obj.id) !== -1 { 
     newArr.push(obj) 
    }; 
    }; 
    return newArr; 
};