我不太了解下面的JavaScript示例。
function containsAll(arr) {
for (let k = 1; k < arguments.length; k++) {
let num = arguments[k];
if (arr.indexOf(num) === -1) {
return false;
}
}
return true;
}
let x = [2, 4, 6, 7];
console.log(containsAll(x, 2, 4, 7));
console.log(containsAll(x, 6, 4, 9));
控制台中的输出为1
和0
。
我正在尝试设想它应该如何工作。
x
,将其更改为console.log(containsAll(2,4,6,7,2,2, 4,7))。 function containsAll
获得这些数字(2、4、6、7、2、4、7)。 在这一行中,for(let k = 1; k < arguments.length; k++)
,k
应该是一个新数组[1、2、3、4、5、6],其参数长度是arr的长度(在这种情况下,长度为7),对吗?
下一步,let num = arguments[k]; if (arr.indexOf(num) === -1) {return false;}
let num
应该是num = 1
,对吧?
然后,在if语句中,它测试1
是否在数组中,arr = [2,4,6,6,7,2,4,7]。如果找不到匹配项,则返回false。并且应该对arr
数组中的下一个数字重复,对吗?
我只是想弄清楚为什么它在返回1
之类的内容时会为console.log(containsAll(x, 2, 4, 7));
输出[false, true, false, true, false, true]
。
答案 0 :(得分:2)
- 在此console.log(containsAll(x,2,4,4,7))中,应替换
x
,将其更改为console.log(containsAll(2,4,6,7,2,2, 4, 7))。
否,它停留在[2, 4, 6, 7], 2 ,4 ,7
function containsAll
获得这些数字(2、4、6、7、2、4、7)。
它得到[2, 4, 6, 7], 2 ,4 ,7
- 在这一行中,
for(let k = 1; k < arguments.length; k++)
,k
应该是一个新数组[1、2、3、4、5、6],其参数长度 是arr的长度(在本例中为7),对吧?
k
只是一个数字,表示arguments
中的索引而不是数组。
长度只有4,数组只是一个元素
- 下一步,
let num = arguments[k]; if (arr.indexOf(num) === -1) {return false;}
let num
应该是num = 1
,对吧?
num
遍历arguments
(2 ,4 ,7
)的其余元素。请注意,for循环中的k=1
会跳过第一个元素。
- 然后,在if语句中,它测试
1
是否在数组中,arr = [2,4,6,7,2,4,7]。如果找不到匹配项,则返回false。和 应该重复arr
数组中的下一个数字,对吗?
如果找到第一个匹配项,则已经返回。
我只是想弄清楚为什么输出
1
console.log(containsAll(x, 2, 4, 7));
应该何时返回 类似于[false, true, false, true, false, true]
。
调用return
时,方法内的执行停止。
答案 1 :(得分:0)
First, your code currently outputs `true` and `false` not 1 and 0.
The reason you don't have an array like this,[false, true, false, true, false, true], is because of the `return` keyword used in the conditional `if` statement inside your `for` loop.
下面的代码是一种实现方法。
function containsAll(arr) {
let result = []
for (let k = 1; k < arguments.length; k++) {
let num = arguments[k];
if (arr.indexOf(num) === -1) {
result.push(false);
} else{
result.push(true);
}
}
return result;
}
let x = [2, 4, 6, 7];
console.log(containsAll(x, 2, 4, 7)); //Output [true, true, true]
console.log(containsAll(x, 6, 4, 9)); //Output [true, true, false]