javascript - 重新排列动态对象以形成结构化对象

标签 javascript arrays object ecmascript-6

我有一个这样的对象:

const val = {"abc":{"1":1, "2":6,"3":5},"def":{"1":3, "2":4,"3":8},"xyz":{"1":5, "2":6,"3":7}}

我想像下面这样转换对象数据:

[{"abc":1,"def":3,"xyz":5},{"abc":6,"def":4,"xyz":6}, ...]

所有的值都是动态的,可以有任意数量的内部对象

我试过这样的:

const val = {"abc":{"1":1, "2":6,"3":5},"def":{"1":3, "2":4,"3":8},"xyz":{"1":5, "2":6,"3":7}}

let dataObj = {};
let secondArr = [];
let dataArr =[]
Object.entries(val).map(firstObj=>{
    Object.entries(firstObj[1]).forEach(secondObj => {
  dataObj={[firstObj[0]]:secondObj[1]};
      secondArr.push(dataObj);
    })
  dataArr.push(secondArr)
})

console.log(dataArr)

谁能告诉我一个解决方案? 提前致谢

最佳答案

您可以迭代对象的条目并将内部键作为数组的索引,新对象具有外部键和值。

var data = { abc: { 1: 1, 2: 6, 3: 5 }, def: { 1: 3, 2: 4, 3: 8 }, xyz: { 1: 5, 2: 6, 3: 7 } },
    result = Object
        .entries(data)
        .reduce((r, [k, o]) => {
            Object.entries(o).forEach(([i, v]) =>
                Object.assign(r[i - 1] = r[i - 1] || {}, { [k]: v }));
            return r;
        }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 重新排列动态对象以形成结构化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54985191/

相关文章:

c++ - 计算空字符单元格 C++

arrays - Lua多维表创建

javascript - Object.defineProperty 不适用于窗口对象 IE11

c# - 比赛 : Storing an arbitrary number of fields

javascript - 使用 Jest 模拟依赖项中的依赖项?

java - 从 Java 中的列表中减去值

java - 两个相同的类可以序列化和反序列化吗?

python - 使用python将对象 append 到列表是抛出对象内存地址而不是对象内部的数据

javascript - 从 Can.Model 获取直接 Json

javascript - HTML5 Canvas 与 SVG + Raphael.js 的优缺点是什么?