2016-02-03 2 views

ответ

4

Lodash имеет функцию "карту", которая работает так же, как jQuerys:

var myArr = [{ name: "john", age:23 }, 
 
       { name: "john", age:43 }, 
 
       { name: "jimi", age:10 }, 
 
       { name: "bobi", age:67 }]; 
 

 
var johns = _.map(myArr, function(o) { 
 
    if (o.name == "john") return o; 
 
}); 
 

 
// Remove undefines from the array 
 
johns = _.without(johns, undefined)

+0

спасибо, но я спросил конкретный ответ lodash. Я тоже могу сделать петлю. – sarsnake

+0

Разве вы не прочитали вторую часть ответа? –

+1

Я удалил нерелевантный ответ и исправил ваш скрипт, так как в нем были ошибки – Technotronic

60

Использование lodash _.filter метод:

_.filter(collection, [predicate=_.identity]) 

итерацию через элементы коллекции, возвращающую массив всех предикатов элементов возвращает правду. Предикат вызывается с тремя аргументами: (значение, индекс | ключ, коллекция).

с предикатом в качестве пользовательской функции

_.filter(myArr, function(o) { 
    return o.name == 'john'; 
}); 

с предикатом в качестве части фильтруемого объекта (The _.matches iteratee сокращенном)

_.filter(myArr, {name: 'john'}); 

с предикатом как [ключ, значение] массив (_.matchesProperty итерация стенография.)

_.filter(myArr, ['name', 'John']); 
+1

Вы должны упомянуть, что ваш пример с использованием _.matchesProperty iteratee сокращает работу только от lodash v4. Для lodash v3 он не имеет матричных скобок. – NicBright

+0

@NicBright true, thx для комментария –

+1

Ссылка на документы была бы полезна: https://lodash.com/docs/4.17.4#filter –

0

             
  
let myArr = [ 
 
    {name: "john", age:23}, 
 
    {name: "john", age:43}, 
 
    {name: "jim", age:101}, 
 
    {name: "bob", age:67}, 
 
]; 
 

 
let list = _.where(myArr,{name:'john'});
Смежные вопросы