我正在建造一个奥赛罗AI并遇到了一个奇怪的AS2问题。
通过将初始数组(arr_nums)传递给它来设置等于函数返回的临时数组(arr_temp)(timesTen();)。
为什么它也改变了初始数组?
我能找到最简单的方法来重现我的问题:
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天,仍然不知道出了什么问题以及如何修复它?
非常感谢任何想法!
答案 0 :(得分:0)
这是因为您实际上是通过不使用它的浅层副本来修改原始数组。
timesTen = function(deltaArr){
var result = deltaArr.slice();
for(i = 0; i < result.length; i ++){
result[i] *= 10;
}
return result;
}