Javascript:在 for 循环期间构建的数组会重置其顺序

标签 javascript arrays

<分区>

这段代码看起来很简单

let arr = [1,2,3,4,5,6]
let store = [];

for(i = 0; i < arr.length; i++){
  console.log(arr)
  store.push(arr)
  arr.push(arr.shift())
}
console.log('store', JSON.stringify(store))

我期待它回来

[[1,2,3,4,5,6],[2,3,4,5,6,1],[3,4,5,6,1,2],[4,5,6,1,2,3],[5,6,1,2,3,4],[6,1,2,3,4,5]]

但是当循环完成后,显示

[[1,2,3,4,5,6],[1,2,3,4,5,6],[1,2,3,4,5,6],[1,2,3,4,5,6],[1,2,3,4,5,6],[1,2,3,4,5,6]]

在控制台中打印值时,它们看起来是正确的,但是当存储变量被记录时,它们都被重新排序。

[1, 2, 3, 4, 5, 6]
[2, 3, 4, 5, 6, 1]
[3, 4, 5, 6, 1, 2]
[4, 5, 6, 1, 2, 3]
[5, 6, 1, 2, 3, 4]
[6, 1, 2, 3, 4, 5]

为什么会这样?

这里有一个类似的问题,但它并没有真正为我的案例提供答案。

Creating a pair of arrays from an array resulting in circular array

最佳答案

只需确保您插入的不是对数组的相同引用:

let arr = [1,2,3,4,5,6]
let store = [];

for(i = 0; i < arr.length; i++){
  store.push(Array.from(arr))  // <-- Make sure not the same ref
  arr.push(arr.shift())
}
console.log('store', JSON.stringify(store))

关于Javascript:在 for 循环期间构建的数组会重置其顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53547964/

相关文章:

javascript - 如何在创建 React 组件时为其初始化 Redux 状态?

javascript - 将对象添加到数组中,然后显示在表格中

javascript - 使用构造函数进行原型(prototype)设计时如何访问实例?

c - 二维数组和指针 - C

php - PHP:如何基于数组中的概率获取值?

JavaScript 正则表达式 : `/x.*y/` versus `/x(?=.*y)/`

javascript - 有没有办法在javascript中获取外部数据?

javascript - 当我从另一个对象调用它时对象未定义

java - JAVA,使法线数组具有顶点数组的长度(来自已解析的OBJ文件)

mysql - 我需要哪种 MySQL 类型来存储常规字符串和哈希值?