【问题标题】:How to convert object into array with lodash如何使用 lodash 将对象转换为数组
【发布时间】:2015-10-12 05:16:12
【问题描述】:

我有下面的对象

{
    "holdings": [
        {
            "label": "International",
            "value": 6
        },
        {
            "label": "Federal",
            "value": 4
        },
        {
            "label": "Provincial",
            "value": 7
        }
    ]
}

我想用lodash将它转换成下面的对象

{
    "holdings": [
        [
            "International",
            6
        ],
        [
            "Federal",
            4
        ],
        [
            "Provincial",
            7
        ],
        [
            "Corporate",
            7
        ]
    ]
}

有什么办法可以改变它。请提出建议。

【问题讨论】:

  • 需要搭配lodash吗?
  • 是的...但是建议您是否有更好的解决方案
  • holdings.map(function(l){return Object.keys(l).map(function(v){return l[v]})})

标签: javascript arrays object lodash


【解决方案1】:

如果你只想使用 lodash,那么你可以使用 _.mapValues_.values 来获得结果,像这样

console.log(_.mapValues(data, _.partial(_.map, _, _.values)));
// { holdings: [ [ 'International', 6 ], [ 'Federal', 4 ], [ 'Provincial', 7 ] ] }

没有偏函数也可以这样写,像这样

console.log(_.mapValues(data, function(currentArray) {
    return _.map(currentArray, _.values)
}));
// { holdings: [ [ 'International', 6 ], [ 'Federal', 4 ], [ 'Provincial', 7 ] ] }

【讨论】:

    【解决方案2】:

    这以递归方式工作(因此,如果您想保留它,则必须在 holdings 属性上调用)并“理解”嵌套对象和嵌套数组。 (原版 JS):

    var source = {
        "holdings": [
            {
                "label": "International",
                "value": 6
            },
            {
                "label": "Federal",
                "value": 4
            },
            {
                "label": "Provincial",
                "value": 7
            }
        ]
    }
    
    function ObjToArray(obj) {
      var arr = obj instanceof Array;
    
      return (arr ? obj : Object.keys(obj)).map(function(i) {
        var val = arr ? i : obj[i];
        if(typeof val === 'object')
          return ObjToArray(val);
        else
          return val;
      });
    }
    
    alert(JSON.stringify(ObjToArray(source.holdings, ' ')));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-06
      • 2019-01-26
      • 1970-01-01
      • 2019-04-18
      • 2019-08-09
      • 1970-01-01
      相关资源
      最近更新 更多