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

如何根据数组元素repeat属性值复制对应次数元素生成新数组

实现方案

1. 最简实现(基于flatMap)

flatMap天然适配映射后一对多的场景,无需额外拼接数组:

const result = rawArray.flatMap(item => {
  // repeat为null时仅保留原元素1次
  if (item.repeat === null) return [item]
  // repeat不为null时,生成 repeat + 1 个元素(原元素 + repeat次复制)
  // 若你需要repeat值直接等于总出现次数,把下方repeat + 1改为repeat即可
  return Array.from({ length: item.repeat + 1 }, () => ({ ...item }))
})

2. 兼容旧环境的循环实现

如果运行环境不支持ES6的flatMap,可以用普通遍历实现:

const result = []
for (let i = 0; i < rawArray.length; i++) {
  const current = rawArray[i]
  const copyCount = current.repeat === null ? 1 : current.repeat + 1
  for (let j = 0; j < copyCount; j++) {
    // 这里用对象展开做浅拷贝,如需深拷贝可以替换为structuredClone(current)
    result.push({ ...current })
  }
}

效果示例

输入:

const rawArray = [{ name: "Name", repeat: null }, { name: "Name1", repeat: 2 }]

运行后输出:

[
  { name: "Name", repeat: null },
  { name: "Name1", repeat: 2 },
  { name: "Name1", repeat: 2 },
  { name: "Name1", repeat: 2 }
]

注意事项

  • 示例中用{...item}做浅拷贝,仅适用于元素只有一层基础属性的场景;如果元素有嵌套对象,且你需要修改生成后的元素时互不影响,可以替换为structuredClone(item)做深拷贝
  • 如果你不需要拷贝,直接复用原对象引用,直接填入原元素即可,性能更好

内容的提问来源于stack exchange,提问作者Milos N.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:06:08