javascript - 缩小并扁平化一个物体的物体

标签 javascript arrays ecmascript-6 lodash reduce

我正在尝试压平一个看起来像这样的对象,

{ 
  O75376: { 
    ABC: [], 
    XYZ: ["a", "b", "c"],
    FGH: ["x", "y", "z"]
  },
  O75378: { 
    ABC: [], 
    XYZ: ["a", "b", "c"],
    FGH: ["x", "y", "z"]
  },
}

我希望它像 075376: ["a","b","c","x","y","z"], 075378: ["a","b",“c”,“x”,“y”,“z”],

const flat = reduce(data, (accumulator, content, key) => {
                accumulator[key] = flatMap(content, (x, y) => {
                  return map(x, b => {
                    return y + '~' + b
                  })
                })
                return accumulator;
              }, {});

这适用于 lodash,但我无法弄清楚这如何在 ES6 中实现。

最佳答案

您可以减少对象的条目,并通过展平所有数组将每个键添加到新对象。

const obj = { 
  "O75376": { 
    ABC: [], 
    XYZ: ["a", "b", "c"],
    FGH: ["x", "y", "z"]
  },
  "O75378": { 
    ABC: [], 
    XYZ: ["a", "b", "c"],
    FGH: ["x", "y", "z"]
  },
};
const res = Object.entries(obj).reduce((acc,[key,val])=>(
  acc[key] = Object.values(val).flat(), acc
), {});
console.log(res);

如果只能使用 ES6,则可以使用 Array.prototype.concat.apply([], array) 代替 array.flat()

const obj = { 
  "O75376": { 
    ABC: [], 
    XYZ: ["a", "b", "c"],
    FGH: ["x", "y", "z"]
  },
  "O75378": { 
    ABC: [], 
    XYZ: ["a", "b", "c"],
    FGH: ["x", "y", "z"]
  },
};
const res = Object.entries(obj).reduce((acc,[key,val])=>(
  acc[key] = Array.prototype.concat.apply([], Object.values(val)), acc
), {});
console.log(res);

关于javascript - 缩小并扁平化一个物体的物体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62701749/

相关文章:

javascript - 如果文档中不存在该字段,该如何处理Firebase查询?

c - 将 strtok 的指针分配给二维结构数组中的指针,所有条目都应该是唯一的,但打印出来是相同的

javascript - 将一个多维数组 append 到另​​一个多维数组javascript的底部

javascript - 如何将 try catch block 包装在箭头函数中以调用 api?

node.js - mongodb nodejs db.collection 不是函数

javascript - window.open 页面加载

javascript - 使用 React-Bootstrap ListGroup 通过 onClick 触发函数

javascript - 局部变量在 javascript 的回调函数中变得未定义

java - 如何正确地将String转换为ArrayList?

reactjs - 在React ES6中,为什么输入字段在输入字符后失去焦点?