2015-05-20 62 views
-1

我有一個認證方案,允許用戶成爲多個公司的僱員。因此,當他們通過access_token認證時,該access_token允許他們在他們所在的任何一家公司進行交易。所以用戶基本上只有一次登錄,並且可以在不登出的情況下與所有公司進行交互。在javascript數組的每個對象中選擇一個字段

每當他們試圖採取行動時,我都需要確保他們是他們正試圖改變的公司的僱員。

授權函數在回調中有一個employees對象。這是像這樣的列表:

[ { _id: 555c990c37b3af9214754416, 
    company: 555c97d6b0b7e88d140810c6, 
    user: 555c990c37b3af9214754415, 
    __v: 0, 
    date_added: Wed May 20 2015 10:23:07 GMT-0400 (EDT), 
    permissions: { write: true, read: true } }, 
    { _id: 555c994937b3af921475441b, 
    company: 555c992537b3af9214754417, 
    user: 555c990c37b3af9214754415, 
    __v: 0, 
    date_added: Wed May 20 2015 10:23:07 GMT-0400 (EDT), 
    permissions: { write: true, read: true } } ] 

這將是每做一個調用的API,也就是用戶的employee對象的列表將被審查時作出;所以我想以最快和最簡單的方式從每個對象中選擇公司字段。雖然這可以很容易地使用for循環和編譯列表company完成,我需要它更清潔。

有沒有這種類型的東西的一個班輪,一種方法來選擇每個索引沒有循環的領域,或循環完成幕後?

+0

您可以用[lodash的'_.pluck'(https://lodash.com/docs#pluck)? – Ryan

+0

@minitech,這似乎會工作,但它返回一個對象,而不是一個數組,任何想法呢? –

+0

你怎麼使用它? – Ryan

回答

0

lodash和類似的庫提供pluck,這應該做你想要什麼:

var companies = _.pluck(employees, 'company'); 
+0

'_.pluck'實際上調用'_.map',你應該從'_.map(employees,'company')'得到相同的結果,並且花費少一點。 –

+0

@chrisvdp:好的;我只是覺得這個名字更加明顯。 – Ryan

0

如果員工在公司內,這會給你一個bool。這種方法的好處在於,當發現真實情況時,它會將環路短路。

var isInCompany = _.some(employees, function(employee){ 
    employee.company === companyId; 
}); 

根據您支持的瀏覽器(IE9 +),也可以使用本機對象。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some

+0

這很高興知道,但它現在不適合我的應用程序。 –

0

也許你可以使用Array.map功能,如:

yourList.map(function(obj){return obj.company}) 

這將返回所有的公司名單。

相關問題