为了账号安全,请及时绑定邮箱和手机立即绑定

如何将多个对象的数组合并为单个对象?

如何将多个对象的数组合并为单个对象?

拉风的咖菲猫 2022-07-08 18:11:48
所以,我有一个这样的数组:[  { tags__region: "Stockholm" },  { tags__region: "Lund" },  { tags__region: "Mora" },  { tags__user: "Johan" },  { tags__user: "Eva" }]我想把它变成这样的对象:{  tags__region: ["Stockholm", "Lund", "Mora"],   tags__user: ["Johan", "Eva"]}有没有办法用lodash?vanilla Array/Object - 方法是否足够简单?请记住,我阵列上的键是未知的,因此它们并不总是相同的。
查看完整描述

2 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

简单的 Javascript。


let arr = [{

    tags__region: "Stockholm"

  },

  {

    tags__region: "Lund"

  },

  {

    tags__region: "Mora"

  },

  {

    tags__user: "Johan"

  },

  {

    tags__user: "Eva"

  }

];


arr = arr.reduce((acc, val) => {


  let key = Object.keys(val)[0];

  let value = Object.values(val)[0];

  acc[key] =  acc[key] ? [...acc[key],value] : [value]

  return acc;

}, {})


console.log(arr);


查看完整回答
反对 回复 2022-07-08
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

你可以使用 Lodash's _.mergeWith()with array spread 将数组中的所有项目组合成一个对象。如果两个对象中存在相同的属性,则这些值将被收集到一个数组中:


const arr = [{"tags__region":"Stockholm"},{"tags__region":"Lund"},{"tags__region":"Mora"},{"tags__user":"Johan"},{"tags__user":"Eva"}]


const result = _.mergeWith({}, ...arr, (objValue = [], srcValue) => 

  [...objValue, srcValue]

)


console.log(result)

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>


使用 Lodash/fp,您可以fn使用 生成一个函数 ( ) _.mergeAllWith(),_.concat()这将做同样的事情:


const fn = _.mergeAllWith(_.concat)


const arr = [{"tags__region":"Stockholm"},{"tags__region":"Lund"},{"tags__region":"Mora"},{"tags__user":"Johan"},{"tags__user":"Eva"}]


const result = fn(arr)


console.log(result)

<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>



查看完整回答
反对 回复 2022-07-08
  • 2 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信