2016-05-02 165 views
0

我用mongodb使用nodejs。我的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,因爲這是一個函數,你也可以不使用函數,但使用一個函數,你需要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; 
    } 
}); 

將返回{b:2 C:3},因爲這些都是大於或等於2響應註釋,以確保你可能會想d像這樣的東西,如果你有一個陣列:

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

_.map(objects, checkIfMeetsMyCriteria); 
+0

它現在的工作,非常感謝你。我仍然想知道爲什麼'_.pick'之前工作。 我多次看看我的版本控制。我看到我使用'_.pick'。但現在我將所有代碼都改爲使用'_.pickBy'。 – Thesaria

+0

我很確定'_.pick'和'_.pickBy'都不能解決OP的問題。由於這兩個函數接受一個對象而不是一個數組。 OP中問題中的'object'被定義爲一個對象數組。 – ryeballar

+0

真的,我認爲,因爲他們有工作代碼在一個點上,他們已經做了像'_.each(對象,函數(對象){' – Zargold