为什么数组是空的

Pet*_*erK 2 javascript unityscript

我刚刚开始学习Unity3D javascript,这是我第一次尝试学习,试图复制一个洗牌的Objective-C代码片段,我有以下代码:

function Shuffle(theCardArray : Array) {
var dupeArray = new Array();
var count = theCardArray.length;

print("theCardArray: " + theCardArray);


dupeArray = theCardArray;
    count = dupeArray.length;
print("A) Count dupeArray: " + count);
print("B) Count dupeArray: " + dupeArray.length);
theCardArray.Clear();

for (var i = 0; i < count; i++) {

    // Select random element between i and the end of the array to swap it
    var nElements = count - i;
    var n = Random.Range(0, nElements);

    print("#1");
    print("C) Count dupeArray: " + dupeArray.length);
    print("dupeArray: " + dupeArray);
    var dummyString = dupeArray[n];
    print("#2");

    theCardArray.Push(dummyString);
    print("#3");
}

}
Run Code Online (Sandbox Code Playgroud)

我的印刷品中有以下内容:

theCardArray:返回,D2,D3,D4,D5,D6,D7,D8,D9,D10,DJ,DQ,DK

A)计数dupeArray:13

B)计数dupeArray:13

'#1'

C)计数dupeArray:0

在B)dupeArray有13个实体,在C)dupeArray是空的!

有人可以向我解释为什么数组在C)是空的吗?

顺便说一句,我知道Unity3D还有其他方法可以实现同样的目的,但这是为了学习!

我想出的最终和真正的解决方案是:

用以下方式调用ShuffleThis:

arr = ShuffleThis(arr);
Run Code Online (Sandbox Code Playgroud)

随机播放功能:

function ShuffleThis(theCardArray : Array) : Array {

var size : int = theCardArray.length;

for (var i : int = 0; i < size; i++) {

    var indexToSwap : int = Random.Range(i, size);
    var oldValue = theCardArray[i];
    theCardArray[i] = theCardArray[indexToSwap];
    theCardArray[indexToSwap] = oldValue;
}

return theCardArray;
}
Run Code Online (Sandbox Code Playgroud)

来源:使用UnityScript的Fisher-Yates Shuffle

Jon*_*les 7

这是因为数组dupeArray只是对原始数组的引用theCardArray,所以当你清除原始数组时,你也要清除重复的数组; 引用.

为了解决您的问题,您应该克隆原始数组,这可以使用像这样的切片来完成...

var dupeArray = theCardArray.slice(0);

或者,它也可以使用像这样的jQuery扩展方法来完成...

var dupeArray = $ .extend(true,[],theCardArray);