2015-11-07 15 views
5

Konieczne jest filtrowanie jednej tablicy na podstawie innej tablicy. Czy funkcja nokautowania jest wyłączona? jeszcze muszę iść z javascriptTablica filtrów nie jest w innym zestawie

pierwszy:

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

drugie:

var obj2 = [ 2,3] 

teraz muszę filtrować obj1 podstawie obj2 i powrotu pozycji z obj1, że nie są w obj2 omittng 2 3 w powyższych danych (porównanie na obiekcie 1 Id)

Wydajność:

[{ 
    "visible": "true", 
    "id": 1 
}, { 
    "Name": "Test3", 
    "id": 4 
}]; 

Odpowiedz

10

można po prostu uruchomić poprzez obj1 użyciu filter i używać indexOf na obj2 aby sprawdzić, czy istnieje. indexOf zwraca -1, jeśli wartość nie znajduje się w tablicy, a filter zawiera element, gdy wywołanie zwrotne zwraca true.

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

Aby utworzyć macierz wyjściową, należy utworzyć funkcję, która będzie iterację obj1 i wypełnić nową tablicę na podstawie tego, czy id każdego obj w iteracji istnieje w 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; 
}; 
Powiązane problemy