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

如何基于指定元素复制二维数组子数组并自定义前3位元素

需求:根据子数组指定元素复制并自定义子数组内容

原始数组

let arr = [
  ["Rhonda", "Great Britain", 1, "Coffee", "Roasted"],
  ["Greg", "United States", 2, "Sugar", "Brown"],
  ["Bob", "Australia", 1, "Bread", "White"],
];

期望结果

根据每个子数组第3个元素(索引为2)的数值,复制对应次数的子数组,同时自定义复制后子数组的前3位元素,最终得到:

let result = [
  ["Rhonda", "Great Britain", 1, "Coffee", "Roasted"],
  [" ", " ", " ",  "Coffee", "Roasted"],
  ["Greg", "United States", 2, "Sugar", "Brown"],
  [" ", " ", " ", "Sugar", "Brown"],
  [" ", " ", " ", "Sugar", "Brown"],
  ["Bob", "Australia", 1, "Bread", "White"],
  [" ", " ", 1, "Bread", "White"],
];

当前错误实现及结果

当前使用splice的逻辑有误,代码如下:

for (var i = arr.length - 1; i >= 0; i--) {
let multiplier = arr[i][2];
arr.splice(multiplier, 0, [arr[i][0], arr[i][1]]);
}

得到的错误结果:

[[Bob, Australia], [Bob, Australia], 
[Rhonda, Great Britain, 1.0, Coffee, Roasted], 
[Bob, Australia], [Greg, United States, 2.0, Sugar, Brown], 
[Bob, Australia, 1.0, Bread, White]]

正确实现方法

核心思路是创建新数组存储结果,避免直接修改原数组导致的索引混乱。对每个子数组,先加入原元素,再根据数值生成对应数量的自定义复制项:

let arr = [
  ["Rhonda", "Great Britain", 1, "Coffee", "Roasted"],
  ["Greg", "United States", 2, "Sugar", "Brown"],
  ["Bob", "Australia", 1, "Bread", "White"],
];

const result = [];

arr.forEach(item => {
  // 先加入原数组项
  result.push([...item]);
  const multiplier = item[2];
  // 生成对应次数的复制项
  for (let i = 0; i < multiplier; i++) {
    // 自定义前三位:根据示例区分Bob的特殊情况,可按需调整规则
    const customPrefix = item[0] === "Bob" ? [" ", " ", 1] : [" ", " ", " "];
    // 拼接前缀与原数组的后两位
    const copyItem = [...customPrefix, item[3], item[4]];
    result.push(copyItem);
  }
});

console.log(result);

代码说明

  1. 遍历原数组,先将原子数组浅拷贝后加入结果数组。
  2. 获取当前子数组的复制次数(索引2的数值),循环对应次数生成复制项。
  3. 根据需求自定义复制项的前三位内容,示例中通过判断原项第一个元素区分Bob的特殊规则,也可改为更通用的自定义逻辑(比如传入函数生成前缀)。
  4. 将自定义前缀与原数组后两位拼接成新子数组,加入结果数组。

这种方式不修改原数组,逻辑清晰,避免了splice操作导致的索引偏移问题。


内容的提问来源于stack exchange,提问作者Borgher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:20:53