2016-05-02 3 views
0

Я использую nodejs с mongodb. мой object - это что-то вроде того, что я получаю от запроса коллекции. Затем я фильтрую его с помощью lodashhttps://lodash.com/docs#pick.Lodash _.pick() возвращает пустые объекты

var _ = require('lodash'); 

var object = [{ 
    branchID: '1239', 
    branchName: 'Branch Name 1', 
    zoneID: '51', 
    zoneName: 'Zone Name 1', 
    regionID: '5', 
    regionName: 'Region 1' 
}, 
{ 
    branchID: '1240', 
    branchName: 'Branch Name 2', 
    zoneID: '52', 
    zoneName: 'Zone Name 2', 
    regionID: '5', 
    regionName: 'Region 3' 
}]; 

var test1 = _.pick(object, function (data) { 
    return data.branchName == 1239 
}); 

var test1 = _.pick(object, function (data) { 
    return data.branchName == "1239" 
}); 

console.log(test); // {} 

Я работаю с mongodb сегодня. Этот код выше работает до сегодняшнего вечера. Обычно, он должен вернуть мне это:

{ 
    branchID: '1239', 
    branchName: 'Branch Name 1', 
    zoneID: '51', 
    zoneName: 'Zone Name 1', 
    regionID: '5', 
    regionName: 'Region 1' 
} 

ли я какую-то ошибку? и есть ли у меня другой способ фильтрации этого объекта?

ответ

1

Я думаю, вы должны использовать _.pickBy, потому что это функция, которую вы также не могли использовать, но с помощью функции, которую вам нужно выбрать.

Для дальнейшего объяснения: _.pick когда вы хотите получить точные ключи внутри объекта, как _.pick({a: 1, b: 2, c: 3}, ['a', 'c']) вернется =>{a: 1, c: 3} только что совпадает с _.omit делать то же самое с опускаем: _.omit ({а : 1, b: 2, c: 3}, ['b']) ....

Затем настало время, когда вы хотите проверить, соответствует ли ключ или значение определенным критериям, поэтому вы должны использовать _ .pickBy или _.omitBy:

_.pickBy({a: 1, b: 2, c: 3}, function(item){ 
    if(_.gte(item, 2)){ 
     return item; 
    } 
}); 

вернется {Ь: 2, с: 3}, потому что те больше или равно 2. в ответ на комментарий, чтобы убедиться, вы, вероятно, хотите d o что-то вроде этого, если у вас есть массив:

function checkIfMeetsMyCriteria(obj){ 
    _.pickBy(obj, function (data) { 
     return data.branchName == "1239" 
    }); 
} 

_.map(objects, checkIfMeetsMyCriteria); 
+0

Это работа теперь спасибо вам большое. Я все еще удивляюсь, почему «_.pick» работает раньше. Я смотрю на мой контроль версий много раз. Я вижу, что я использую '_.pick'. но теперь я изменил весь свой код на использование '_.pickBy'. – Thesaria

+0

Я уверен, что ни '_.pick', ни' _.pickBy' не могут решить проблему OP. Поскольку обе функции принимают объект, а не массив. 'object' в вопросе OP определяется как массив объектов. – ryeballar

+0

Правда я предполагал, что, поскольку у них был рабочий код в какой-то момент, они уже делали что-то вроде '_.each (objects, function (object) {' – Zargold

Смежные вопросы