簡體   English   中英

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

[英]How do I make this function work as expected?

我試圖制作一個函數,該函數將復制現有數組sunsetColors ,並將第一個元素更改為“ blue”。

然后我的sunset函數應該返回數組的副本。 請幫助我了解需要進行哪些更改以使其按預期工作。

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

我正在嘗試:

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

接頭將返回

包含已刪除元素的數組。 如果僅刪除一個元素,則返回一個元素的數組。 如果沒有刪除任何元素,則返回一個空數組。 MDN-接頭

因此,您需要返回集合,而不是返回拼接的結果

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

這將使您的函數“按預期運行”(因為它現在返回修改后的數組。但是,“ splice()方法通過刪除現有元素和/或添加新元素來更改數組的內容。”)如果您打算僅修改要使用的副本,則應制作副本然后再修改該副本。

將slice與unshift一起使用是一種很好的解決方案, @mahan在其答案中也提到了這一點

“ slice()方法返回數組一部分的淺表副本” ,這將覆蓋復制方面,而“ unshift()方法將一個或多個元素添加到數組的開頭” ,這將覆蓋插入。

它看起來像這樣,仍然使用箭頭功能:

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

使用.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")) 

您可以將數組添加到包含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')) 

試試這個解決方案。 首先,它創建數組的副本(而不是引用),然后替換第一個元素。

 let sunsetColors = ["brown", "purple", "pink", "red", "orange", "yellow"]; copy = (array) => { let newArray = [...array]; newArray[0] = 'blue'; return newArray; }; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM