[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
包含的所有元素,modifiedArray
是 firstArray
和 return 的副本。
toRemove.length
决定循环次数,toremove
中每个值执行一次。
还有一点很重要,indexOf
只显示第一个查找对象的index
。所以,如果数组中有多个相同的数字,则不会被删除。
['a','b','b'].indexOf('b')
我英语不好。只能跟你说这么多了
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
包含的所有元素,modifiedArray
是 firstArray
和 return 的副本。
toRemove.length
决定循环次数,toremove
中每个值执行一次。
还有一点很重要,indexOf
只显示第一个查找对象的index
。所以,如果数组中有多个相同的数字,则不会被删除。
['a','b','b'].indexOf('b')
我英语不好。只能跟你说这么多了