如何使此功能按预期工作?

时间:2018-05-21 20:44:48

标签: javascript arrays

我尝试创建一个复制现有数组sunsetColors的函数,并将第一个元素更改为“蓝色”。

然后我的sunset函数应该返回数组的副本。请帮助我了解我需要更改的内容,以使其按预期工作。

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

我在尝试什么:

sunset = () => {
  return sunsetColors.splice(0, 1, 'blue');
}

4 个答案:

答案 0 :(得分:4)

Splice将返回

  

包含已删除元素的数组。如果仅删除一个元素,则返回一个元素的数组。如果未删除任何元素,则返回空数组。 MDN - splice

所以你需要返回集合,而不是拼接的结果



var sunsetColors = ["brown", "purple", "pink", "red", "orange", "yellow"];
sunset = () => {
    sunsetColors.splice(0, 1, 'blue');
    return sunsetColors;
};
console.log(sunset());




这将使您的功能正常工作"正如所料" (因为它现在返回修改后的数组。但是," splice()方法通过删除现有元素和/或添加新元素来更改数组的内容。"。如果它只是你的意图修改要使用的副本,然后你应该复制然后修改那个副本。

将slice与unshift一起使用是一种很好的方法,@mahan alludes to this in their answer也是如此。

"The slice() method returns a shallow copy of a portion of an array",其中将涵盖复制方面,"the unshift() method adds one or more elements to the beginning of an array"将涵盖插入内容。

它看起来像这样,仍然使用你的箭头功能:



var sunsetColors = ["brown", "purple", "pink", "red", "orange", "yellow"];
sunset = () => {
    let arrayCopy = sunsetColors.slice(1);
    arrayCopy.unshift('blue');
    return arrayCopy;
};
console.log(sunset());




答案 1 :(得分:1)

使用.slice()方法克隆数组。



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

function copySunsetColor(list, color) {
  var colorList = list.slice();
  // Add 'color' at the start of the list 
  colorList[0] = color
  return colorList;
}

console.log(copySunsetColor(sunsetColors, "blue"))




使用unshift在列表开头添加项目。



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

function copySunsetColor(list, color) {
  var colorList = list.slice();
  // Replace the first item of the list with 'color' input
  colorList.unshift(color)
  return colorList;
}

console.log(copySunsetColor(sunsetColors, "blue"))




答案 2 :(得分:0)

您可以将数组添加到包含blue的新数组。

sunset = ['blue'].concat(sunsetColors)



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

sunset = ['blue'].concat(sunsetColors.slice(1))

console.log(sunset)




如果您需要更改与第一个元素不同的其他值,您可以使用以下函数:

f = (array, position, value) => { array[position] = value; return array }



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

f = (array, position, value) => { array[position] = value; return array }
console.log(f(sunsetColors, 0, 'blue'))




答案 3 :(得分:0)

试试这个解决方案。首先,它创建一个数组的副本(不是引用),然后它替换第一个元素。

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

copy = (array) => {
  let newArray = [...array];
  newArray[0] = 'blue';
  return newArray;
};