【问题标题】:Drop items from the beginning of the array inside a loop without mutating original array在循环内从数组的开头删除项目而不改变原始数组
【发布时间】:2020-02-23 20:48:23
【问题描述】:

所以我在使用 javascript 数组拼接时遇到问题,它会更改原始数组,例如

let arr1 = [1,2,3,4,5]
for(i = 0; i < 5; i++){arr1.splice(i,1);}

在上面的示例中,arr1 在每次迭代后都会发生变化,例如:- [2,3,4,5]...[3,4,5]..etc

我想要实现的是:-

let arr1 = [1,2,3,4,5];
for(i = 0; i < 5; i++){
    let arr2 = arr1.splice(i,1);
}

此结果应在所有迭代中将 arr1 设为 [1,2,3,4,5] ...但 arr2 为 [2,3,4,5]...[3,4,5] ..etc .....基本上,我希望拼接函数不操纵原始数组,而是在一个新数组中给出结果,并且原始数组在所有迭代期间保持不变......有什么办法吗?

【问题讨论】:

  • 请添加第一次迭代的结果。

标签: javascript arrays array-splice


【解决方案1】:

你可以用索引加一来分割数组。

let arr1 = [1, 2, 3, 4, 5];
for (let i = 0; i < 5; i++) {
    console.log(...arr1.slice(i + 1));
}

【讨论】:

    【解决方案2】:

    如果您想在公共数组中返回这些部分数组(覆盖单个变量,因为它现在由您的代码完成并没有多大意义)您可以使用 Array.prototype.slice()Array.prototype.map()

    const src = [1,2,3,4,5],
          res = src.map((_,i,s) => s.slice(i))
          
    console.log(JSON.stringify(res))
    .as-console-wrapper{min-height:100%;}

    如果您需要对这些部分数组做一些进一步的事情,您可以修改您的初始代码,如下所示:

    let arr1 = [1,2,3,4,5];
    for(i = 0; i < 5; i++){
        let arr2 = arr1.slice(i+1)
        //log stringified arr2
        console.log(JSON.stringify(arr2))
    }
    .as-console-wrapper{min-height:100%;}

    或者,使用Array.prototype.forEach

    let arr1 = [1,2,3,4,5];
    arr1.forEach((_,i,s) => {
      const arr2 = s.slice(i+1)
      // log stringified arr2
      console.log(JSON.stringify(arr2))
     
    })
    .as-console-wrapper{min-height:100%;}

    【讨论】:

      猜你喜欢
      • 2021-12-25
      相关资源
      最近更新 更多