簡體   English   中英

這個 function 中的 [i] 在做什么?

[英]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中刪除,同樣,它將toRemovemodifiedArray中刪除 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.

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