在javascript数组的每个对象中选择一个字段

时间:2015-05-20 14:53:00

标签: javascript loops indexing

我有一个身份验证方案,允许用户成为多家公司的员工。因此,当他们使用access_token进行身份验证时,access_token允许他们在他们所在的任何一家公司进行交易。所以基本上用户只有一次登录,他们可以与所有公司进行互动,而无需退出。

每当他们尝试执行某项操作时,我都需要确保他们是他们想要改变的公司的员工。

authorize函数在其回调中有一个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列表轻松完成,但我需要它更清晰。

是否有这种类型的内容,一种方法在每个索引处选择一个字段而不进行循环,或者在幕后进行循环?

3 个答案:

答案 0 :(得分:0)

如果员工在公司,这将为您提供bool。这种方法的好处在于,当找到true时,它会在循环外短路。

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

根据您支持的浏览器(IE9 +),您也可以使用本机对象。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some

答案 1 :(得分:0)

也许您可以使用Array.map函数,如:

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

这将返回所有公司的列表。

答案 2 :(得分:0)

lodash和类似的库提供pluck,它应该做你想做的事情:

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