
本文介绍一种遍历对象键值对的方法,当某个键对应的数组为空时,自动将其填充为前一个非空键中数组的最后一个元素,从而实现数据延续性填充。
在实际开发中,我们常遇到结构化数据中存在“占位空数组”的场景,例如后端返回的配置项或分步表单数据中,某些阶段暂无内容但需继承上一阶段的默认状态。此时,手动维护易出错,而通过一次遍历动态填充则既简洁又可靠。
以下是对 myitems 对象的填充逻辑实现:
let lastValue = null;
for (const key in myitems) {
if (Array.isArray(myitems[key]) && myitems[key].length === 0) {
// 当前值为空数组,且已有有效 lastValue,则填充为 [lastValue]
if (lastValue !== null) {
myitems[key] = [lastValue];
}
} else if (Array.isArray(myitems[key]) && myitems[key].length > 0) {
// 更新 lastValue 为当前数组最后一个元素
lastValue = myitems[key][myitems[key].length - 1];
}
// 非数组值(如 undefined、null、字符串等)将被忽略,不更新 lastValue
}✅ 关键点说明:
- 使用 Array.isArray() 增强健壮性,避免对非数组类型调用 .length 导致异常;
- lastValue 始终保存最近一次遇到的非空数组的末尾对象,确保语义上的“前一个有效值”;
- 空数组统一填充为单元素数组 [lastValue],保持结构一致性(与原始数据类型对齐);
- 若首个键即为空数组(无前置有效值),则保持原空数组不变,不作默认填充,符合安全优先原则。
? 扩展建议:
如需支持深层嵌套或多种默认策略(如 fallback 到全局默认值),可封装为可复用函数,并接受 defaultValue 或 fallbackFn 参数。但对于本例的线性依赖关系,上述循环已足够清晰、高效且易于理解。









