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

CodeWars无人机飞掠题中,splice调用为何未得到预期结果?

问题分析:flyBy函数中splice的使用错误

你遇到的问题和扩展运算符的浅拷贝无关,核心是对splice的两个误解:

  1. splice的返回值不是修改后的数组
    arr.splice(0, dl, 'o')返回的是被删除的元素组成的数组(也就是你看到的['x','x','x','x','x']),你把这个返回值join后自然得到xxxxx。而修改后的数组是原数组arr本身,不是splice的返回值。

  2. 插入的元素数量不对
    你只传了一个'o'作为插入值,splice会把删除的5个元素替换成这1个'o',而不是5个。如果要替换成dl个'o',需要传入对应数量的元素,比如用...Array(dl).fill('o')来展开生成dl个'o'作为参数。

修正后的代码示例:

function flyBy(lamps, drone){
  let arr = [...lamps];
  let dl = drone.length;

  // 替换前dl个元素为dl个'o'
  arr.splice(0, dl, ...Array(dl).fill('o'));
  let answer = arr.join('');
  
  console.log(answer); // 原数组6个x的话,会输出'ooooox'
}

简单验证下:原数组是6个x,drone长度5,splice删除前5个x,插入5个o,最终数组是5个o加1个x,join后就是ooooox,符合题目要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:10:27