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; } ) 
这个迭代两次