Javascript:按特定字段获取所有对象

时间:2014-05-16 20:41:19

标签: javascript arrays node.js performance

这可能是一个非常简单的问题,但我还没有遇到过优雅的解决方案。

如何通过单个字段从数组中获取所有对象。例如;


var users = [{name:'John', age: 20}, 
{name:'Sarah', age: 21}, 
{name:'George', age:34}];
var names = magicFunction(users, 'name');
// names = ['John', 'Sarah', 'George']; 
// Another challenge is not to get field name (in this case 'name') with the value

我想知道你是否可以使用过滤器地图这样的功能,而无需编写长函数?

3 个答案:

答案 0 :(得分:2)

是的,它很直接:

var prop = 'name';
var names = users.map(function(x) { return x[prop]; });

或者如果你想把它写成一个函数:

function getProp(arr, prop)
{
    return arr.map(function(x) { return x[prop]; });
}

var names = getProp(users, 'name');

更新在ES6语法中:

const getProp = (arr, prop) => Array.prototype.map.call(arr, x => x[prop]);
const names = getProp(users, 'name');

答案 1 :(得分:1)

Underscore.js(可以作为节点包安装)有一个名为_.pluck的函数,它正是这样做的。如果您_ = require("underscore"),您实际上可以将magicFunction替换为_.pluck

答案 2 :(得分:0)

@ p.s.w.g可能是您正在寻找的解决方案,但我想展示另一个:使用core.operators

var names = users.map(opts.get('name'));