如何用下一个键的首个元素填充对象中的空数组值?
用下一个键的首个元素填充对象中的空数组
需求说明
需要为对象中的空数组属性填充值,规则是:当前属性为空数组时,使用下一个键对应值的首个元素来填充该空数组。
目标示例
// 原始对象 const myitems = { 'items1': [{first:true, second:false}, {first:true, second:true}], 'items2': [], // 填充后应为 [{first:true, second:false}] 'items3': [], // 填充后应为 [{first:true, second:false}] 'items4': [{first:true, second:false}, {first:true, second:true}], 'items5': [{first:false, second:true}], 'items6': [], // 填充后应为 [{first:true, second:true}] 'items7': [{first:true, second:true}], }
尝试的代码
Object.entries(myItems).forEach(([key, value], index, values: any) => { // 判断当前值是否为空数组,且下一个键存在且对应值不为空数组 if (!values[index][1].length && values[index+1] && values[index+1][1].length) { // 复制下一个键对应值的首个元素,填充当前空数组 myItems[key] = [{...values[index + 1][1][0]}] } })
代码问题与优化
你的代码逻辑大体正确,但存在几个细节问题:
- 变量名不一致:示例对象是
myitems(小写i),但代码中使用的是myItems(大写I),会导致变量未定义错误。 - 冗余取值:
values[index][1]和value是同一个值,可以直接使用value.length简化判断。
优化后的代码如下:
const myitems = { 'items1': [{first:true, second:false}, {first:true, second:true}], 'items2': [], 'items3': [], 'items4': [{first:true, second:false}, {first:true, second:true}], 'items5': [{first:false, second:true}], 'items6': [], 'items7': [{first:true, second:true}], } Object.entries(myitems).forEach(([key, value], index, entries) => { const nextEntry = entries[index + 1]; // 检查当前为空数组,且下一个条目存在、对应值不为空 if (value.length === 0 && nextEntry && nextEntry[1].length > 0) { // 浅拷贝下一个条目的首个元素,避免原对象引用被修改 myitems[key] = [{...nextEntry[1][0]}]; } }) // 验证结果 console.log(myitems.items2); // [{first: true, second: false}] console.log(myitems.items3); // [{first: true, second: false}] console.log(myitems.items6); // [{first: true, second: true}]
这段代码会严格按照需求填充所有空数组,同时避免了变量名错误和冗余逻辑,运行结果完全符合预期。
内容的提问来源于stack exchange,提问作者Mat
相关产品推荐
相关产品推荐

