【问题标题】:Selecting a field in every object of a javascript array在 javascript 数组的每个对象中选择一个字段
【发布时间】:2015-05-20 14:53:00
【问题描述】:

我有一个身份验证方案,允许用户成为多家公司的员工。因此,当他们通过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 对象列表;所以我想以最快和最简单的方式从每个对象中选择公司字段。虽然这可以使用 for 循环和编译 company 列表轻松完成,但我需要它更简洁。

这种类型的事情有没有一种方法,一种在每个索引处选择一个字段而不循环的方法,或者在幕后完成循环?

【问题讨论】:

  • 你能用lodash’s _.pluck吗?
  • @minitech,这似乎可以工作,但它返回的是一个对象而不是一个数组,有什么想法吗?
  • 你是如何使用它的?
  • var companies = lodash.pluck(employees, 'company'); console.log(companies); console.log(typeof(companies));Employees 是一个对象,所以这可能是问题所在。
  • @minitech,如果您发布答案,我会接受。

标签: javascript loops indexing


【解决方案1】:

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

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

【讨论】:

  • _.pluck 实际上调用了_.map 你应该从_.map(employees, 'company') 得到相同的结果,而且开销要少一些。
  • @chrisvdp:当然;我只是觉得这个名字更明显一点。
【解决方案2】:

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

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

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

【讨论】:

  • 这很高兴知道,但它现在不像其他应用程序那样顺利地适合我的应用程序。
【解决方案3】:

也许你可以像这样使用 Array.map 函数:

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

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

【讨论】:

    猜你喜欢
    • 2017-04-16
    • 2014-11-27
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    相关资源
    最近更新 更多