如何使用lodash将对象转换为数组

时间:2015-07-22 11:03:45

标签: javascript arrays object lodash

我有下面的对象

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

我想用lodash将其转换为下面的对象

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

有没有办法改变它。请建议。

2 个答案:

答案 0 :(得分: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 ] ] }

答案 1 :(得分:0)

这是递归工作的(如果你想保留它,必须在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, ' ')));