当其他数组传递给函数时,AS2 数组会发生变化吗?
AS2 array gets changed when other array is passed to function?
我正在构建黑白棋 AI 并 运行 解决一个奇怪的 AS2 问题。
通过将初始数组 (arr_nums) 传递给函数 (timesTen();) 来设置临时数组 (arr_temp) 等于函数 (timesTen();) 的 return 时。
为什么它也改变了初始数组?
我能找到重现问题的最简单方法:
arr_nums = [0,1,2,3,4,5,6,7,8,9,10];
timesTen = function(deltaArr){
for(i = 0; i < deltaArr.length; i ++){
deltaArr[i] *= 10;
}
return(deltaArr);
}
test = function(){
arr_temp = timesTen(arr_nums);
trace('temp: ' + arr_temp);
trace('nums: ' + arr_nums);
}
test();
以上代码将跟踪以下内容:
temp: 0,10,20,30,40,50,60,70,80,90,100
nums: 0,10,20,30,40,50,60,70,80,90,100
首选轨迹:
temp: 0,10,20,30,40,50,60,70,80,90,100
nums: 0,1,2,3,4,5,6,7,8,9,10
即使我没有通过 arr_nums 并如下更改测试,它也会生成相同的输出:
test = function(){
arr_temp = arr_nums;
arr_temp = timesTen(arr_temp);
trace('arr_temp: ' + arr_temp);
trace('arr_nums: ' + arr_nums);
}
现在已经拼命地尝试、测试和搜索了 2 天,但仍然不知道哪里出了问题以及如何解决它?
非常感谢任何想法!
发生这种情况是因为您实际上修改了原始数组,而不是使用它的浅拷贝。
timesTen = function(deltaArr){
var result = deltaArr.slice();
for(i = 0; i < result.length; i ++){
result[i] *= 10;
}
return result;
}
我正在构建黑白棋 AI 并 运行 解决一个奇怪的 AS2 问题。
通过将初始数组 (arr_nums) 传递给函数 (timesTen();) 来设置临时数组 (arr_temp) 等于函数 (timesTen();) 的 return 时。
为什么它也改变了初始数组?
我能找到重现问题的最简单方法:
arr_nums = [0,1,2,3,4,5,6,7,8,9,10];
timesTen = function(deltaArr){
for(i = 0; i < deltaArr.length; i ++){
deltaArr[i] *= 10;
}
return(deltaArr);
}
test = function(){
arr_temp = timesTen(arr_nums);
trace('temp: ' + arr_temp);
trace('nums: ' + arr_nums);
}
test();
以上代码将跟踪以下内容:
temp: 0,10,20,30,40,50,60,70,80,90,100
nums: 0,10,20,30,40,50,60,70,80,90,100
首选轨迹:
temp: 0,10,20,30,40,50,60,70,80,90,100
nums: 0,1,2,3,4,5,6,7,8,9,10
即使我没有通过 arr_nums 并如下更改测试,它也会生成相同的输出:
test = function(){
arr_temp = arr_nums;
arr_temp = timesTen(arr_temp);
trace('arr_temp: ' + arr_temp);
trace('arr_nums: ' + arr_nums);
}
现在已经拼命地尝试、测试和搜索了 2 天,但仍然不知道哪里出了问题以及如何解决它?
非常感谢任何想法!
发生这种情况是因为您实际上修改了原始数组,而不是使用它的浅拷贝。
timesTen = function(deltaArr){
var result = deltaArr.slice();
for(i = 0; i < result.length; i ++){
result[i] *= 10;
}
return result;
}