lodash _.filter возвращает пустой массив

0

Я застрял в 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 возвращает пустой массив :-(

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

  • 0
    matches ожидают объект, и вы пытаетесь передать массив: lodash.com/docs#matches
  • 0
    Тот же результат без массива.
Показать ещё 1 комментарий
Теги:
lodash

1 ответ

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);

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

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

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

См. Рабочий пример

  • 0
    Огромное спасибо;) теперь это работает.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню