[英]What is the [i] doing in this function?
const removeFromArray = function(firstArray,...toRemove) {
let modifiedArray = [...firstArray];
for (let i = 0; i < toRemove.length; i++) {
if (modifiedArray.includes(toRemove[i])) {
modifiedArray.splice(modifiedArray.indexOf(toRemove[i]), 1)
}
}
return modifiedArray;
};
console.log(removeFromArray([3,4,5], 3,5)) ; //result is [4]
目標:將任何數組作為第一個參數,並從所述數組中刪除您想要的任何內容作為下一個參數。
抱歉,這讓我無法入睡,但是[i]
附加toRemove
做了什么?
假設我想做removeFromArray(['a','b','c'], 'b');
這將意味着toRemove
等於 'b'。 toRemove 的長度將為 1。因此循環說運行一次迭代,因為 toRemove 只有 1 個長度。
至此,我想我明白了。 我不明白為什么(modifiedArray.includes(toRemove[i]))
因為那不只是意味着(modifiedArray.includes('b'[1]))
嗎?
如果你這樣做removeFromArray(['a','b','c'], 'a', 'c');
[i]
是否意味着toRemove
將被迭代兩次,每次一次,所以對於第二次迭代,它的值將是 2?
(modifiedArray.includes(['a', 'c'][1]))
(modifiedArray.includes(['a' ,'c'][2]))
還是會
(modifiedArray.includes(['a' ,'c'][1]))
(modifiedArray.includes(['a' ,'c'][1]))
我希望我能夠解釋我的困惑,我有點沮喪。 謝謝!
這僅僅是因為rest 參數
來自 MDN 文檔
rest 參數語法允許我們將不定數量的 arguments 表示為一個數組。
因此,在您的示例中,您的 arguments 傳遞給您的removeFromArray
function (3,5)
成為一個名為toRemove
的數組,並且為了訪問您必須執行 remove[i] 的值。
這是一個幫助您澄清的示例
const removeFromArray = function(a, b) { console.log(a) console.log(b) } removeFromArray(1, 3)
添加spread operator
並將值作為單個argument
傳遞
const removeFromArray = function(...toRemove){ console.log(toRemove) } removeFromArray(1,3)
const removeFromArray = function (firstArray, ...toRemove) {
首先閱讀Rest 參數。
firstArray
將是您傳遞給此 function 的第一個參數。
...toRemove
將參數的 rest 作為數組。
如果您以這種方式調用 function removeFromArray([1,3,4], 4,5,6,7)
,
firstArray
將等於[1, 3, 4]
toRemove
將等於[4, 5, 6, 7]
let modifiedArray = [...firstArray];
// 這將創建firstArray
的副本並將其存儲在modifiedArray
中。
for (let i = 0; i < toRemove.length; i++) {
這將遍歷值為 [4, 5, 6, 7] 的toRemove
數組
if (modifiedArray.includes(toRemove[i])) {
在第一次迭代中,它將檢查toRemove[0]
,即4
是否存在於modifiedArray
中,如果存在,它將從下一行的modifiedArray
中刪除該元素。 在第二次迭代中,它將檢查toRemove[1]
為5
並將其從modifiedArray
中刪除,同樣,它將toRemove
從modifiedArray
中刪除 toRemove 中的所有元素。
modifiedArray.splice(modifiedArray.indexOf(toRemove[i]), 1);
最后,它將從作為firstArray
副本的modifiedArray
中刪除數組toRemove
包含的所有元素並將其返回。
toRemove.length
決定循環次數, toremove
中的每個值都執行一次。
還有一點很重要, indexOf
只顯示第一次查找 object 的index
。 因此,如果數組中有多個相同的數字,則不會被刪除。
['a','b','b'].indexOf('b')
我英語說的不好。 我只能和你說這么多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.