这可能是一个非常简单的问题,但我还没有遇到过优雅的解决方案。
如何通过单个字段从数组中获取所有对象。例如;
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
我想知道你是否可以使用过滤器或地图这样的功能,而无需编写长函数?
答案 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'));