我一直在浏览下划线文档,但似乎找不到方法(或嵌套方法调用)来进行以下转换:
假设我有以下 Javascript 数组:
[{ "name" : "sEcho", "value" : 1},{ "name" : "iColumns", "value" : 12}, ... ]
我需要将其转换为以下对象:
{
sEcho: 1,
iColumns: 12,
...
}
我使用 underscore.js 是有原因的,所以它必须是单行的。
我一直在浏览下划线文档,但似乎找不到方法(或嵌套方法调用)来进行以下转换:
假设我有以下 Javascript 数组:
[{ "name" : "sEcho", "value" : 1},{ "name" : "iColumns", "value" : 12}, ... ]
我需要将其转换为以下对象:
{
sEcho: 1,
iColumns: 12,
...
}
我使用 underscore.js 是有原因的,所以它必须是单行的。
Sza 的答案的变体,使用“对数组”签名_.object:
_.object(_.map(data, function(x){return [x.name, x.value]}))
由于没有人将此作为答案发布,因此我发布它是因为我认为它比Jan 的答案更好。没有内联函数,它更短、更干净。
_.object(_.pluck(data, 'name'), _.pluck(data, 'value'));
这应该这样做:
_.reduce(array, function(o, v){
o[v.name] = v.value;
return o;
}, {});
作为一个单行者(你在开玩笑吧?):
_.reduce(array,function(a,b){a[b.name]=b.value;return a},{});
var names = _.pluck(data, 'name');
var values = _.pluck(data, 'value');
var result = _.object(_.zip(names, values));
console.log(result);
假设您有以下 JavaScript 数组:
var list = [
{
name: "sEcho",
value: 1
},
{
name: "iColumns",
value: 12
},
...
];
您可以将其转换为您想要的格式,如下所示:
var table = _.reduce(list, function (table, item) {
table[item.name] = item.value;
return table;
}, {});
这不是一个班轮,但我不认为你的字面意思是一个班轮。你是否?
如果您真的是指一个衬里,那么这里是一个衬里:
var t = _.reduce(list, function (t, i) { return t[i.name] = i.value, t; }, {});
是的,其他人也提供了相同的答案。然而,这仅仅是因为你的问题的答案是如此简单。
var a = [{ "name" : "sEcho", "value" : 1},{ "name" : "iColumns", "value" : 12} ];
var o = {}; _.each(a, function(e) { o[e.name] = e.value; });
console.log(o);
// Object {sEcho: 1, iColumns: 12}
我认为使用 reduce 的完美场所:
_.reduce(ary, function(memo, obj){ memo[obj["name"]] = obj["value"]; return memo }, {});
var arr = [{ "name" : "sEcho", "value" : 1},{ "name" : "iColumns", "value" : 12}]
ES6
_.mapObject( _.indexBy(arr, 'name'), (v) => v.value )
ES5
_.mapObject( _.indexBy(arr, 'name'), function (v) { return v.value; } )
虽然这会迭代两次