Я застрял в Angular.js, используя lodash _.filter
.
$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 []
Я ожидал:
$scope.fined= [{name:'FirstName',items:["Phone","Tablet"]}];
Я не знаю, почему, но _.filter
возвращает пустой массив :-(
Некоторые идеи?
_.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);
Цитирование документов:
Этот метод поддерживает сравнение массивов, булевых объектов, объектов Date, чисел, объектов Object, регулярных выражений и строк. Объекты сравниваются своими собственными, но не наследуемыми, перечислимыми свойствами.
Обратите внимание, что это не будет работать при использовании подчеркивания, поскольку это не приведет к глубокой проверке элементов массива.
См. Рабочий пример
matches
ожидают объект, и вы пытаетесь передать массив: lodash.com/docs#matches