在for循环中进行数组解构?

时间:2019-08-13 09:27:31

标签: javascript

我正在尝试理解以下代码?以及为什么我得到以下输出

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]

3 个答案:

答案 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 = 10j = 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);