Underscore.js – 将键/值对的数组映射到对象 – 一个class轮

我一直在经历下划线文档,但我似乎无法find一个方法(或嵌套的方法调用)做下列转换:

比方说,我有以下的JavaScript数组:

[{ "name" : "sEcho", "value" : 1},{ "name" : "iColumns", "value" : 12}, ... ] 

我需要将其转换为以下对象:

  { sEcho: 1, iColumns: 12, ... } 

我使用underscore.js的原因,所以它必须是一个class轮。

由于没有人发布这个答案,所以我发布了它,因为我认为这比Jan的答案要好。 它更短,更干净,没有内联function。

 _.object(_.pluck(data, 'name'), _.pluck(data, 'value')); 

Sza答案的变化,使用_.object的“数组对”签名:

 _.object(_.map(data, function(x){return [x.name, x.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; }, {}); 

这不是一个class轮,但我不认为你字面意思是一个class轮。 你是否?

如果你的意思是一个class轮,这里是一个class轮:

 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} 

完美的地方使用减less我认为:

_.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; } ) 

这个迭代两次