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

Selecting a field in every object of a javascript array

我有一个身份验证方案,允许一个用户成为多家公司的员工。因此,当他们通过 access_token 进行身份验证时,access_token 允许他们在他们作为雇员的任何一家公司上进行交易。所以基本上用户只有一个登录,他们可以在不注销的情况下与他们所有的公司互动。

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

授权函数在其回调中有一个 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 对象列表;所以我想以最快和最简单的方式 select 来自每个对象的公司字段。虽然这可以使用 for 循环并编译 company 的列表轻松完成,但我需要它更简洁。

是否有针对此类事物的单一衬垫,一种在每个索引处 select 一个字段而不循环或在幕后完成循环的方法?

这会给你一个 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

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

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

这将 return 所有公司的列表。

lodash 和类似的库提供 pluck,它们应该可以满足您的需求:

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