[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 parameter

来自 MDN 文档

The rest parameter syntax allows us to represent an indefinite number of arguments as an array.

所以在您的示例中,您传递给 removeFromArray 函数的参数 (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 parameters

firstArray 将是您传递给此函数的第一个参数。

...toRemove 将参数的其余部分作为数组。

如果你这样调用函数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++) {

这将遍历 toRemove 数组,其值为 [4, 5, 6, 7]

if (modifiedArray.includes(toRemove[i])) {

在第一次迭代中,它将检查 toRemove[0]4 是否存在于 modifiedArray 中,如果存在,它将从 modifiedArray 中删除该元素下一行。 在第二次迭代中,它将检查 toRemove[1]5 并将其从 modifiedArray 中删除,同样它将继续从 modifiedArray 中删除 toRemove 中存在的所有元素.

modifiedArray.splice(modifiedArray.indexOf(toRemove[i]), 1);

最后,它会从 modifiedArray 中删除数组 toRemove 包含的所有元素,modifiedArrayfirstArray 和 return 的副本。

toRemove.length决定循环次数,toremove中每个值执行一次。

还有一点很重要,indexOf只显示第一个查找对象的index。所以,如果数组中有多个相同的数字,则不会被删除。

['a','b','b'].indexOf('b')

我英语不好。只能跟你说这么多了