我正在尝试理解以下代码?以及为什么我得到以下输出
for (let [i, j, ...x] of [
[2, 3, 4, 5, 10, 11, 12, 13].filter(e => e > 5)
]) {
console.error(x)
}
预期输出[10, 11, 12, 13]
实际输出x = [12, 13]
答案 0 :(得分:4)
for(let [i, j, ...x] of [[2, 3, 4, 5, 10, 11, 12, 13].filter(e => e > 5 )]) {
console.error(x)
}
首先,您需要查看[2, 3, 4, 5, 10, 11, 12, 13].filter(e => e > 5 )
它返回:[10, 11, 12, 13]
。
然后将应用[i, j, ...x] = [10, 11, 12, 13]
。这意味着i = 10
,j = 11
和x占了其余部分,这意味着x = [12, 13]
。
我们打印x
,瞧,它是[12, 13]
。
但是[[10, 11, 12, 13]]
呢?首先查看下面的代码段:
let [k, l, ...y] = [2, 3, 4, 5, 10, 11, 12, 13]
console.log(k,l,y)
let [i, j, ...x] = [[2, 3, 4, 5, 10, 11, 12, 13]]
console.log(i,j,x)
因此,使用一个方括号可以得到预期的结果,为什么在给定的代码中使用双括号并可以正常工作?
好吧,请参见以下代码片段并进行比较:
for (let [i, j, ...x] of [[2, 3, 4, 5, 10, 11, 12, 13]]) {
console.log(i,j,x)
}
这很好用,但是当我们用单括号循环时会发生什么呢?
for (let [i, j, ...x] of [2, 3, 4, 5, 10, 11, 12, 13]) {
console.log(i,j,x)
}
我们收到一个错误!但为什么?
for...of
通过其内部迭代器获取数组的内部值。它从外部数组(即内部数组)中获取“下一个”元素。这就是为什么我们只能在循环中进行一次迭代,因为只有一个“下一个”!
我们正在对该单个元素进行迭代,我们应用解构语法并打印结果。基本上,这里有很多热空气。
答案 1 :(得分:0)
您只需要删除i,j
for (let [...x] of [
[2, 3, 4, 5, 10, 11, 12, 13].filter(e => e > 5)
]) {
console.error(x)
}
答案 2 :(得分:0)
如果要获取大于5的数字,可以使用此代码
for (let [i, j, ...x] of [
[2, 3, 4, 5, 10, 11, 12, 13].filter(e => e > 5)
]) {
console.error(x)
}
var numberArray= [2, 3, 4, 5, 10, 11, 12, 13];
var numberBiggerThanFive = [];
for(i in numberArray){
if(i > 5 ){
numberBiggerThanFive.push(i)
}
}
console.log(numberBiggerThanFive);