Javascript JS-For循环推送数组
我有一个初始数组 我一直试图在for循环中使用pop、splice方法来更改值(顺序),最后我将此数组推送到容器数组。 但是,每次初始化数组时,都会推送值。当我在push方法之前编写console.log(initial)时,我可以看到初始数组已经更改,但它没有被推送到容器中 我还尝试通过使用settimeout for push方法来减慢进程,但这不起作用。它并没有放缓。我猜这段代码会立即被调用 我想知道这里发生了什么?为什么我会有这样的问题,解决方法是什么Javascript JS-For循环推送数组,javascript,arrays,loops,for-loop,Javascript,Arrays,Loops,For Loop,我有一个初始数组 我一直试图在for循环中使用pop、splice方法来更改值(顺序),最后我将此数组推送到容器数组。 但是,每次初始化数组时,都会推送值。当我在push方法之前编写console.log(initial)时,我可以看到初始数组已经更改,但它没有被推送到容器中 我还尝试通过使用settimeout for push方法来减慢进程,但这不起作用。它并没有放缓。我猜这段代码会立即被调用 我想知道这里发生了什么?为什么我会有这样的问题,解决方法是什么 function trial(){
function trial(){
let schedulePattern = [];
let initial = [1,3,4,2];
for(let i = 0; i < 3; i++){
let temp = initial.pop();
initial.splice(1,0,temp);
console.log(initial);
schedulePattern.push(initial);
}
return schedulePattern;
}
**Console.log**
(4) [1, 2, 3, 4]
(4) [1, 4, 2, 3]
(4) [1, 3, 4, 2]
(3) [Array(4), Array(4), Array(4)]
0 : (4) [1, 3, 4, 2]
1 : (4) [1, 3, 4, 2]
2 : (4) [1, 3, 4, 2]
length : 3
function-trial(){
设schedulePattern=[];
设initial=[1,3,4,2];
for(设i=0;i<3;i++){
设temp=initial.pop();
初始拼接(1,0,温度);
控制台日志(首字母);
schedulePattern.push(初始);
}
返回调度模式;
}
**Console.log**
(4) [1, 2, 3, 4]
(4) [1, 4, 2, 3]
(4) [1, 3, 4, 2]
(3) [阵列(4)、阵列(4)、阵列(4)]
0 : (4) [1, 3, 4, 2]
1 : (4) [1, 3, 4, 2]
2 : (4) [1, 3, 4, 2]
长度:3
当您将initial
推入schedulePattern
时,它将是对同一数组对象的一组引用。如果要保留阵列的当前内容,可以推送阵列的副本:
schedulePattern.push(initial.slice(0));
这里关于引用类型与值类型的回答很好:当您将数组推到schedulepattern时,您正在向它传递一个引用。 您必须“克隆”阵列 使用slice函数
function trial(){
let schedulePattern = [];
let initial = [1,3,4,2];
for(let i = 0; i < 3; i++){
let temp = initial.pop();
initial.splice(1,0,temp);
console.log(initial);
schedulePattern.push(initial.slice());
}
return schedulePattern;
}
function-trial(){
设schedulePattern=[];
设initial=[1,3,4,2];
for(设i=0;i<3;i++){
设temp=initial.pop();
初始拼接(1,0,温度);
控制台日志(首字母);
schedulePattern.push(initial.slice());
}
返回调度模式;
}
您必须知道数组是可变对象。这是什么意思?它意味着发生在您身上的事情,您正在复制对象的引用并对其进行修改
const array = [1,2,3]
const copy = array;
copy.push(4);
console.log(array); // [1, 2, 3, 4]
console.log(copy); // [1, 2, 3, 4]
Javascript中有很多方法,它们为您提供了所需的方法。换句话说,创建一个新的数组副本以在不修改根的情况下正常工作
const array = [1,2,3]
const copy = Array.from(array);
copy.push(4);
console.log(array); // [1, 2, 3]
console.log(copy); // [1, 2, 3, 4]
我鼓励您查看一下,以增加您的知识,从而在使用不同选项时做出最佳决策。
splice
是错误的方法<代码>[6,2,7,2,3].splice()变为[]
<代码>.slice是您想要的。