Underscore.js - Map Array of key/value pairs to an Object - One liner

后端 未结 8 849
囚心锁ツ
囚心锁ツ 2021-02-03 17:53

I\'ve been going through the underscore docs but I can\'t seem to find a method (or nested method call) to do the following transformation:

Let\'s say I have the followi

相关标签:
8条回答
  • 2021-02-03 18:20

    Let's say you have the following JavaScript array:

    var list = [
        {
             name: "sEcho",
             value: 1
        },
        {
             name: "iColumns",
             value: 12
        },
        ...
    ];
    

    You can convert it into the format you want as follows:

    var table = _.reduce(list, function (table, item) {
        table[item.name] = item.value;
        return table;
    }, {});
    

    It's not a one liner, but I don't think you literally meant a one liner. Did you?

    Here's a one liner if you really meant a one liner:

    var t = _.reduce(list, function (t, i) { return t[i.name] = i.value, t; }, {});
    

    Yes, others have provided the same answer. However that's only because the answer to your question is so simple.

    0 讨论(0)
  • 2021-02-03 18:26

    Variation on Sza's answer, using the "array of pairs" signature of _.object:

    _.object(_.map(data, function(x){return [x.name, x.value]}))
    
    0 讨论(0)
  • 2021-02-03 18:27

    perfect place to use reduce I think:

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

    0 讨论(0)
  • 2021-02-03 18:31

    Since nobody has posted this as an answer, I'm posting it because I think it is better than Jan's answer. It's shorter, and cleaner without the inline function.

    _.object(_.pluck(data, 'name'), _.pluck(data, 'value'));
    
    0 讨论(0)
  • 2021-02-03 18:35

    This should do it:

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

    As a one-liner (you are kidding me, right?):

    _.reduce(array,function(a,b){a[b.name]=b.value;return a},{});
    
    0 讨论(0)
  • 2021-02-03 18:42
    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} 
    
    0 讨论(0)
提交回复
热议问题