我正在构建一个Othello人工智能,并且遇到了一个奇怪的AS2问题。
当将初始数组(Arr_temp)传递给函数(timesTen();)时,将其设置为等于返回函数的临时数组(Arr_nums)。
为什么它也会改变初始数组?
我能找到最简单的方法来重现我的问题:
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);
}两天来一直在拼命地尝试、测试和搜索,至今仍不知道出了什么问题,以及如何修复它?
任何想法都是非常感谢的!
发布于 2015-09-17 12:43:43
之所以会发生这种情况,是因为您实际上通过不使用原始数组的浅拷贝来修改它。
timesTen = function(deltaArr){
var result = deltaArr.slice();
for(i = 0; i < result.length; i ++){
result[i] *= 10;
}
return result;
}https://stackoverflow.com/questions/32630308
复制相似问题