2016-05-10 115 views
0

我正在使用lodash在數組中找到多個對象。lodash object to array

這裏是我當前的陣列,當我輸出JSON.stringify(userList)

[ 
    {"Id":1,"Username":"Usr1","Licenses":["IN","OH"]}, 
    {"Id":2,"Username":"Usr2","Licenses":["IN","FL"]}, 
    {"Id":3,"Username":"Usr3","Licenses":["MI"]} 
] 

我想找到誰在印第安納License所有信貸員。

我使用lodash庫並添加以下代碼行:

var result = _.find(userList, function (o) { return ~o.Licenses.indexOf(state);}); 

然而,這隻能返回1個對象,"Id":2不能同時用戶Licneses在印第安納州。

我該如何讓_.find()返回我所有擁有「IN」許可證的用戶?也許我需要使用不同的lodash方法,這對我來說很好。

此外,如果只有1用戶返回到我,像佛羅里達州的一個許可用戶,我需要它返回的結果爲一個數組,就像這樣:

[ 
    {"Id":2,"Username":"Usr2","Licenses":["IN","FL"]} 
] 

謝謝你你的幫助!

+0

*您不能使用*'_.find'做你想做什麼。閱讀文檔:https://lodash.com/docs#find它說'_.find'「迭代集合元素,返回* first *元素」 –

回答

1

可以使用_.filter - 返回所有匹配的項目

0

lodash的方法_.filter是很長的路要走:

在迭代集合的元素,返回所有元素的數組斷言返回truthy對於。

_.find只返回第一個匹配元素

0

你可以做如下。它會爲你帶來搜索狀態的所有對象。您也可以搜索多個狀態。

myData = [ 
 
      {"Id":1,"Username":"Usr1","Licenses":["IN","OH"]}, 
 
      {"Id":2,"Username":"Usr2","Licenses":["IN","FL"]}, 
 
      {"Id":3,"Username":"Usr3","Licenses":["MI"]} 
 
     ], 
 
getAll = (...sts) => myData.reduce((p,o) => sts.some(s => o.Licenses.includes(s)) ? p.concat(o) : p ,[]); 
 

 
document.write("<pre>" + JSON.stringify(getAll("IN"),null,2) + "</pre>");

0

可以使用array'sfilter功能,而無需使用lodash

所以一個襯墊會

var state = 'IN'; 
var test = [ 
    {"Id":1,"Username":"Usr1","Licenses":["IN","OH"]}, 
    {"Id":2,"Username":"Usr2","Licenses":["IN","FL"]}, 
    {"Id":3,"Username":"Usr3","Licenses":["MI"]} 
] 

test.filter(x=>x.Licenses.includes(state)) 
0

有使用鏈做一個更多方式,過濾器幷包括

var users = [ 
 
    {"Id":1,"Username":"Usr1","Licenses":["IN","OH"]}, 
 
    {"Id":2,"Username":"Usr2","Licenses":["IN","FL"]}, 
 
    {"Id":3,"Username":"Usr3","Licenses":["MI"]} 
 
]; 
 

 
var ret = _.chain(users).filter(function(o){ 
 
     return _.includes(o.Licenses,'IN'); 
 
    }).value(); 
 

 
console.log(ret);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.12.0/lodash.min.js"></script>