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

如何让sunset函数按预期实现数组复制并修改首元素功能?

问题分析与修复方案

嘿,我来帮你梳理下这个问题~你想要实现一个sunset函数,目标是复制原数组sunsetColors,修改副本的第一个元素为"blue"后返回,但当前的写法没法达到预期,问题出在这两点:

问题1:splice()会直接修改原数组

sunsetColors.splice(0, 1, 'blue')这个操作会直接改动原数组,而不是你想要的先复制再修改副本,这样原数组的第一个元素也会变成"blue",破坏了原始数据。

问题2:splice()的返回值不是你要的数组

splice()方法的返回值是被删除的元素组成的数组,在这里就是["brown"],而不是修改后的完整数组,所以你的函数最终返回的是这个被删掉的元素,不是目标数组。


正确的实现方式

下面给你几种常用的正确写法,都能实现“复制数组→修改副本→返回副本”的需求,而且不会改动原数组:

方法1:扩展运算符(最简洁的现代写法)

var sunsetColors = ["brown", "purple", "pink", "red", "orange", "yellow"];

const sunset = () => {
  // 用扩展运算符复制原数组,生成独立副本
  const copiedArr = [...sunsetColors];
  // 修改副本的第一个元素
  copiedArr[0] = "blue";
  // 返回修改后的副本
  return copiedArr;
};

方法2:slice()方法

slice()不传参数时会返回原数组的浅拷贝,不会影响原数组:

var sunsetColors = ["brown", "purple", "pink", "red", "orange", "yellow"];

const sunset = () => {
  const copiedArr = sunsetColors.slice();
  copiedArr[0] = "blue";
  return copiedArr;
};

方法3:Array.from()方法

适合需要对复制的元素做额外处理的场景,用来单纯复制也完全可行:

var sunsetColors = ["brown", "purple", "pink", "red", "orange", "yellow"];

const sunset = () => {
  const copiedArr = Array.from(sunsetColors);
  copiedArr[0] = "blue";
  return copiedArr;
};

调用任意一种写法的sunset()函数,都会返回["blue", "purple", "pink", "red", "orange", "yellow"],同时原数组sunsetColors会保持原样,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:03:09