javascript - 在不修改原件的情况下将一个数组切片/拼接成另一个数组

标签 javascript

我正在尝试解决一个 freecodecamp 挑战,其中必须将一个数组复制到给定索引处的另一个数组,而不改变原始数组。我提出了自己的解决方案,当我 console.log(); 包装每个函数输入时,据我所知,我得到了想要的结果。但是,它没有通过测试。我没有使用 for 循环并试图使我的解决方案尽可能简单。我将展示我的解决方案和他们的解决方案。

下面是一些突出显示两者的代码:

我的解决方案:

function frankenSplice(arr1, arr2, n) {
  var vArr1 = [...arr1];
  var vArr2 = [...arr2];

  var slice1 = vArr1.slice(0);
  var endBits = vArr2.splice(n);


  return [...vArr2, slice1, endBits];   
}

例如,frankenSplice(["claw", "tentacle"], ["head", "shoulders", "knees", "toes"], 2) 应该返回 ["head", "shoulders", "claw", "tentacle", "knees", "toes"],据我所知,当我使用控制台时(虽然没有通过测试对于该规定)。

他们的解决方案:

function frankenSplice(arr1, arr2, n) {
  let localArray = arr2.slice();
  for (let i = 0; i < arr1.length; i++) {
    localArray.splice(n, 0, arr1[i]);
    n++;
  }
  return localArray;
}

如果我可以用简单的逻辑行来做的话,我只是觉得没有必要使用 for 循环。我猜要么我的做法完全错误,要么我只需要做一个简单的调整就可以解决测试问题。感谢您的帮助。

最佳答案

要实现 ["head", "shoulders", "claw", "tentacle", "knees", "toes"] 作为你函数的结果,你只需要改变您的返回到: 返回 [...vArr2, ...slice1, ...endBits];

如果你的目标是让你的函数尽可能短,你可以使用一个衬里:

const frankenSplice = (arr1, arr2, n) => [ ...arr2.slice(0, n), ...arr1, ...arr2.slice(n)];

关于javascript - 在不修改原件的情况下将一个数组切片/拼接成另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55871856/

相关文章:

javascript - php chop 字段问题

javascript - loadFromJSON 不包括 fabric js 中的附加属性

javascript - Reset() 后 Ractive 表达式不起作用

javascript - 带有自定义图像的触摸栏图标无法在 Electron 中加载

javascript - 无法在 Sails JS 中创建版本化 API

javascript - Jquery - 脚本导入但功能 "Not Defined"

javascript - 无法设置innerHTML

javascript - 如何在 Cypress 中获取所有特定按钮并单击具有特定数据 ID 的每个按钮

javascript - JSON 解析 Bing map 响应

javascript - 如何以编程方式使用 Javascript 将 Canvas 作为图像复制到剪贴板