You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用下一个键的首个元素填充对象中的空数组值?

用下一个键的首个元素填充对象中的空数组

需求说明

需要为对象中的空数组属性填充值,规则是:当前属性为空数组时,使用下一个键对应值的首个元素来填充该空数组。

目标示例

// 原始对象
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 17:27:45