【问题标题】:Convert array of objects to object using lodash使用 lodash 将对象数组转换为对象
【发布时间】:2016-09-16 15:38:32
【问题描述】:

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

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] 转为属性值 谢谢

【问题讨论】:

  • edit问题并添加您尝试过的代码。可以简单地通过遍历数组元素并向对象添加键值对来完成。

标签: javascript arrays object lodash


【解决方案1】:

不使用 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;
},{});

【讨论】:

  • 没想到。赞一个!
  • 很好地使用逗号操作符
  • transform 方法不需要像 reduce 那样返回累加器。你可以这样做:const output = _.transform(data, (a, b) => a[b.name] = b.value, {});
【解决方案2】:

在 lodash 4.15 上,

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

在 lodash 3.10 上,

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

【讨论】:

  • 我正在使用 lodash 3.10 ... QuadTable.js:352 Uncaught TypeError: _.chain(...).keyBy is not a function
【解决方案3】:
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
})

【讨论】:

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