2015-12-05 3 views
0

Я застрял в Angular.js, используя lodash _.filter.lodash _.filter return пустой массив

$scope.test = [ 
    { name: 'FirstName', items: ["Phone", "Tablet"] }, 
    { name: 'FirstName', items: ["TV"] }, 
]; 
$scope.items = [ 
    { item: "Phone" }, 
    { item: "Tablet" } 
] 
$scope.fined = []; 
$scope.fined = _.filter(test, _.matches(items)); 
console.log(fined)// result [] 

I Ожидаемое:

$scope.fined= [{name:'FirstName',items:["Phone","Tablet"]}]; 

Я не знаю, почему, но _.filter возвращение пустой массив :-(

Некоторые идеи

+0

'matches' ожидает объект, и вы пытаетесь передать массив: https://lodash.com/docs#matches – m90

+0

Тот же результат без массива. –

+0

Во-первых: Вы пытаетесь сравнить «массив объектов» с «массивом строк». Во-вторых: 'match' имеют проблемы с массивами сравнения. –

ответ

1

_.matches работ таким образом, что вы проходите? объект, чьи пары значений ключа затем проверяются в возвращаемой функции предиката. Таким образом, ваш случай должен выглядеть следующим образом:

var test = [ 
    { name: 'FirstName', items: ["Phone", "Tablet"] }, 
    { name: 'FirstName', items: ["TV"] }, 
]; 
var items = { items: ["Phone", "Tablet"] }; 

var fined = _.filter(test, _.matches(items)); 
console.log(fined); 

Цитирование документы:

Этот метод поддерживает сравнение массивов, булевы, дата объекты, числа, объекты объектов, регулярные выражения и строки. Объекты сравниваются своими собственными, но не наследуемыми, перечислимыми свойствами.

Обратите внимание, что это будет не работы при использовании подчеркивания, поскольку это не будет делать глубокую проверку на элементах массива.

См a working example

+0

Thx много;) теперь это работает.) –