
本文介绍一种遍历对象属性并用最近一次出现的非空数组末尾元素填充后续空数组的实用方法,适用于数据补全、状态延续等场景。
在实际开发中,我们常遇到需要基于历史状态“延续”当前值的情况——例如,当某个配置项缺失(表现为对应数组为空)时,自动继承上一次有效配置的最后一个条目。这种模式在表单状态同步、时间序列数据插值或 UI 状态缓存等场景中尤为常见。
以下是一个简洁可靠的实现方案:
let lastValue = null;
for (const key in myitems) {
if (Array.isArray(myitems[key]) && myitems[key].length === 0) {
// 当前值为空数组,且已有有效历史值,则填充
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() 显式校验类型,避免对非数组值(如 undefined 或原始类型)调用 .length 导致运行时错误;
- lastValue 始终保存上一个非空数组的末尾对象(而非整个数组),确保填充语义准确;
- 遍历按对象自有属性的枚举顺序执行(ES2015+ 中,字符串键按插入顺序,数字键按升序),因此顺序敏感,需确保 myitems 的键顺序符合业务逻辑预期。
⚠️ 注意事项:
- 若首项即为空数组(如 'items1': []),因无前置有效值,将保持为空,不会被填充;
- 该逻辑仅作用于空数组,不会修改非空数组、null、undefined 或其他类型值;
- 如需支持深层嵌套或更复杂回溯策略(如跳过多个空项后取更早值),应改用函数式递归或反向扫描实现。
此方法轻量、可读性强,无需依赖外部库,适合嵌入各类 JavaScript 数据预处理流程中。










