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

时间:2016-09-16 15:38:33

标签: javascript arrays object lodash

我有一个对象数组,我需要转换为单个对象。 例如:需要转换

var data=[
  {
    "name": "EMPRESA",
    "value": "CMIP"
  },
  {
    "name": "DSP_DIRECAO",
    "value": "CMIP@040@1900-01-01"
  },
  {
    "name": "DSP_DEPT",
    "value": "CMIP@040@1900-01-01@42@1900-01-01"
  },

...     ]

   {
    "EMPRESA": "CLCA",
    "DSP_DIRECAO": "CLCA@100@1900-01-01",
    "DSP_DEPT": "CLCA@100@1900-01-01@100@1900-01-01",
    ...
  }

将data [x] [name]转换为属性,将data [x] [value]转换为属性值 感谢

3 个答案:

答案 0 :(得分:6)

不使用LoDash,而是使用直接reduce()

var obj = data.reduce( (a,b) => {
    return a[b.name] = b.value, a;
}, {});

var data=[
  {
    "name": "EMPRESA",
    "value": "CMIP"
  },
  {
    "name": "DSP_DIRECAO",
    "value": "CMIP@040@1900-01-01"
  },
  {
    "name": "DSP_DEPT",
    "value": "CMIP@040@1900-01-01@42@1900-01-01"
  }
]

var obj = data.reduce( (a,b) => {
    return a[b.name] = b.value, a;
}, {});

console.log(obj);

在LoDash中执行相同操作将类似于

var obj = _.transform(data, (a,b) => {
    return a[b.name] = b.value, a;
},{});

答案 1 :(得分:1)

在lodash 4.15上,

_.chain(data).keyBy("name").mapValues("value").value()

在lodash 3.10上,

_.chain(data).indexBy("name").mapValues("value").value()

答案 2 :(得分:0)

var newObj = {}
var data = [{
    "name": "EMPRESA",
    "value": "CMIP"
}, {
    "name": "DSP_DIRECAO",
    "value": "CMIP@040@1900-01-01"
}, {
    "name": "DSP_DEPT",
    "value": "CMIP@040@1900-01-01@42@1900-01-01"
}]
data.forEach(function(d) {
    newObj[d.name] = d.value
})