
本文介绍如何使用 javascript 的 object.values() 和 array.flat() 方法,快速提取对象中所有键对应的数组值,并合并成单一扁平数组,适用于处理分组存储的同类数据(如不同类别的费用明细)。
本文介绍如何使用 javascript 的 object.values() 和 array.flat() 方法,快速提取对象中所有键对应的数组值,并合并成单一扁平数组,适用于处理分组存储的同类数据(如不同类别的费用明细)。
在实际开发中,我们常会遇到将结构化对象(如按类别组织的 expense 数据)统一归并为扁平数组的需求。例如,holiday_expenses 对象按 food、travel、accommodation 等键分别存放费用明细数组,而业务逻辑可能需要一次性遍历全部条目——此时无需手动循环拼接,只需两步即可高效完成:
-
提取所有值:
Object.values(holiday_expenses)返回一个由各属性值组成的数组,即[ [{name:"abc",place:"xyz"}], [{name:"abcd",place:"xyz1"}], [{name:"xysz",place:"xyz2"}] ]; -
扁平化嵌套:调用
.flat()方法将二维数组降维为一维,得到目标结果。
✅ 完整示例代码如下:
const holiday_expenses = {
food: [{ name: "abc", place: "xyz" }],
travel: [{ name: "abcd", place: "xyz1" }],
accommodation: [{ name: "xysz", place: "xyz2" }]
};
const result = Object.values(holiday_expenses).flat();
console.log(result);
// 输出:
// [
// { name: "abc", place: "xyz" },
// { name: "abcd", place: "xyz1" },
// { name: "xysz", place: "xyz2" }
// ]
⚠️ 注意事项:
-
Object.values()按属性定义顺序返回值(ES2015+ 规范保证),但若需严格保序且兼容旧环境,建议确保对象键声明顺序符合预期; -
.flat()默认仅展开一层嵌套,本例中各属性值均为单元素数组,故无需传参(flat(1)效果相同);若存在更深嵌套(如food: [[{...}]]),需显式指定深度; - 若源对象可能存在
undefined或非数组值(如transport: null),建议增加类型校验,避免.flat()报错:
const result = Object.values(holiday_expenses) .filter(Array.isArray) .flat();
该方案简洁、可读性强,是现代 JavaScript 处理此类“对象→多数组→单数组”转换的标准实践。










