2015-11-07 3 views
5

Нужно фильтровать один массив на основе другого массива. Есть ли функция утилизации в нокауте? еще мне нужно идти с JavaScriptФильтр-массив не в другом массиве

Первая:

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

Второе:

var obj2 = [ 2,3] 

Теперь мне нужно фильтровать obj1 на основе obj2 и возврата элементов из obj1, которые не являются в obj2 omittng 2 , 3 в приведенных выше данных (сравнение на объекте 1 Id)

выход:

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

ответ

10

Вы можете просто запустить через obj1 используя filter и использовать indexOf на obj2, чтобы увидеть, если он существует. indexOf возвращает -1, если значение не находится в массиве, а filter включает элемент, когда обратный вызов возвращает true.

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

Чтобы создать выходной массив, создать функцию, которая будет перебирать obj1 и заселить новый массив на основе того, существует ли идентификатор каждого OBJ в итерации в 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; 
}; 
Смежные вопросы