45

アンダースコアのドキュメントを調べてきましたが、次の変換を行うメソッド (またはネストされたメソッド呼び出し) が見つからないようです:

次のJavascript配列があるとしましょう:

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

そして、それを次のオブジェクトに変換する必要があります。

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

理由でunderscore.jsを使用しているので、ワンライナーでなければなりません。

4

8 に答える 8

52

誰もこれを回答として投稿していないので、 Jan's answerよりも優れていると思うので投稿します。インライン関数がなくても、より短く、よりクリーンです。

_.object(_.pluck(data, 'name'), _.pluck(data, 'value'));
于 2015-02-18T18:38:41.410 に答える
27

これはそれを行う必要があります:

_.reduce(array, function(o, v){
    o[v.name] = v.value;
    return o;
}, {});

ワンライナーとして(冗談ですよね?):

_.reduce(array,function(a,b){a[b.name]=b.value;return a},{});
于 2013-07-23T05:38:57.403 に答える
6

次の 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; }, {});

はい、他の人が同じ答えを提供しています。しかし、それはあなたの質問への答えがとても単純だからです。

于 2013-07-23T05:41:34.700 に答える
3
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} 
于 2013-07-23T05:39:00.333 に答える
2

reduce を使用するのに最適な場所だと思います:

_.reduce(ary, function(memo, obj){ memo[obj["name"]] = obj["value"]; return memo }, {});

于 2013-07-23T06:06:16.787 に答える