CodeWars无人机飞掠题中,splice调用为何未得到预期结果?
问题分析:flyBy函数中splice的使用错误
你遇到的问题和扩展运算符的浅拷贝无关,核心是对splice的两个误解:
splice的返回值不是修改后的数组
arr.splice(0, dl, 'o')返回的是被删除的元素组成的数组(也就是你看到的['x','x','x','x','x']),你把这个返回值join后自然得到xxxxx。而修改后的数组是原数组arr本身,不是splice的返回值。插入的元素数量不对
你只传了一个'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
相关产品推荐
相关产品推荐

