【问题标题】:Flattering objects + arrays + objects into one object javascript [duplicate]将对象+数组+对象合并为一个对象javascript [重复]
【发布时间】:2017-07-13 13:01:56
【问题描述】:

我会直截了当,所以这就是我所拥有的:

    const someObj = {
    one: [
        {
            id: 123,
            text: "lalala"
        },
        {
            id: 456,
            text: "lalala2"
        },
        {
            id: 789,
            text: "lalala3"
        }
    ],
    two: [
        {
            id: 111,
            text: "text random"
        },
        {
            id: 222,
            text: "text random2"
        },
        {
            id: 333,
            text: "text random3"
        }
    ]
};

这是我需要的:

    const someOtherObj = {
    111: {
        id: 111,
            text: "text random"
    },
    222: {
        id: 222,
        text: "text random2"
    },
    333: {
        id: 333,
        text: "text random3"
    },
    123: {
        id: 123,
        text: "lalala"
    },
    456: {
        id: 456,
        text: "lalala2"
    },
    789: {
        id: 789,
        text: "lalala3"
    }
};

我知道这可以在没有百万循环的情况下实现,只是我想不出任何聪明的解决方案。 :/ 那么,也许有人可以帮我解决这个难题? :)

谢谢:)

【问题讨论】:

  • 仅 Stack Overflow 上就有数百篇关于如何展平数组和对象的帖子。您为什么不尝试一下,然后向我们提出您遇到问题的具体问题?

标签: javascript object


【解决方案1】:

尝试使用Array#reduce 函数和ES6

  1. 第一个 reduce 创建了所有内部对象的数组
  2. 第二个reduceid创建对象键

const someObj = { one: [ { id: 123, text: "lalala" }, { id: 456, text: "lalala2" }, { id: 789, text: "lalala3" } ], two: [ { id: 111, text: "text random" }, { id: 222, text: "text random2" }, { id: 333, text: "text random3" } ] };

var res = Object.values(someObj).reduce((a,b)=> (b.forEach(val=> a.push(val)),a),[])

var f = res.reduce((a,b)=> (a[b.id] = b, a),{})
console.log(f)

【讨论】:

    【解决方案2】:

    您只需要使用两个循环,不再需要(使用 ES6 看到您的示例也使用了它)

    const newObj = {};
    for(const key in someObj) {
      for(let i = 0; i < someObj[key].length; i++) {
        const obj = someObj[key][i];
        newObj[obj.id] = {
          id: obj.id,
          text: obj.text
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-12
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多