代码之家  ›  专栏  ›  技术社区  ›  Yordan Kanchelov

仅使用下划线将数组转换为对象

  •  0
  • Yordan Kanchelov  · 技术社区  · 7 年前

    我正在学习下划线,并找到了一个需要帮助的任务。。我有一个数组,对象如下所示

    [
        // ...
        {
                "type": "presence",
                "params": {
                    "interval": 15,
                    "foo": "something",
                    "link": {
                        "fp_type": "1",
                        "fp_ext_id": "2"
                },
        },
        {
                "type": "bar",
                "params": {
                    "interval": 30,
                    "foo": "foo",
                    "link": {
                        "fp_type": "2",
                        "fp_ext_id": "3"
                    },
                },
        },
        // ...
    ]
    

    此任务仅使用下划线将此数组项转换为 键是项目类型,值是其参数,即:

    {
      // ...
      "presence": {
        "interval": 15,
        "foo": "something",
        "link": {
            "fp_type": "1",
            "fp_ext_id": "2"
         },
      }, 
      "bar": {
           "interval": 30,
           "foo": "foo",
           "link": {
               "fp_type": "2",
               "fp_ext_id": "3"
           },
      // ...
    }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   hd84335    7 年前

    您可以这样做:

    var x = [    
        {
                "type": "presence",
                "params": {
                    "interval": 15,
                    "foo": "something",
                    "link": {
                        "fp_type": "sponsor",
                        "fp_ext_id": "spotme"
                    },
                },
        },
        {
                "type": "bar",
                "params": {
                    "interval": 30,
                    "foo": "foo",
                    "link": {
                        "fp_type": "2",
                        "fp_ext_id": "3"
                    },
                },
        }
    ];
    
    var y = _.map(x, function(i) {
      let obj = {};
      obj[i.type] = i.params;
      return obj;
    });
    //console.log(y);
    
    var result = y.reduce(function(obj,item) {	
      obj[_.keys(item)[0]] = _.values(item)[0]; 
      return obj;
    }, {});
    console.log(result);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

    DEMO