0

我第一次尝试在 javascript 中实现 OOP,当我尝试将对象数组发送到该函数时,我陷入了递归函数。所以,我有一些属性的“Pitic”类(pitic 意味着罗马尼亚语中的侏儒):

function Pitic(piticID) {
this.id = piticID;
this.inaltime = null;
this.greutate = null;
this.genereazaGreutate();
this.genereazaInaltime();
}

我现在正在生成一些侏儒并将它们存储在公共piticiCollection Array 变量中。"genereazaGreutate" 和 "genereazaInaltime" 是为 inaltime 和 greutate 值生成随机值的函数。

var pitic = new Pitic(idPitic);
piticiCollection.push(pitic);

当我尝试将侏儒数组发送到函数时出现问题,因为我得到的只是数组的第一项。

所以,在我调用函数之前,我有 4 个对象的 piticiCollection 数组: 侏儒是安全的 http://img443.imageshack.us/img443/484/yr4f.png

一旦我以piticiCollection 作为参数调用该函数,我就会失去3 个侏儒!:( 大部分侏儒都走了 http://img201.imageshack.us/img201/5808/7od5.png

ps 请原谅我的英语不好..

[编辑] 这是我完整代码的一个小提琴:http: //jsfiddle.net/WT7Ud/我在第 56 行调用该函数,一旦调试器到达第 60 行,我就会丢失数组项。

4

3 回答 3

2

我通过在函数中使用数组之前创建数组的副本解决了我的问题。奇怪的 :(

function determinaPerechi(somePitici) {
var piticDeComparat, colectieDePiticiCopy;
colectieDePiticiCopy = somePitici;

for (var i = 1; i < colectieDePiticiCopy.length; i++) {
    var piticDeComparat2 = null;
    piticDeComparat = colectieDePiticiCopy[0];
    piticDeComparat2 = colectieDePiticiCopy[i];

    if (piticDeComparat.inaltime < piticDeComparat2.inaltime) {
        //Perechea poate fi prietena
    }
}
//colectieDePiticiCopy.splice(0, 1);
if (colectieDePiticiCopy.length == 0) {
    //alert("finish");
    return;
}
determinaPerechi(colectieDePiticiCopy);
//test(ttt);
}
于 2013-10-24T00:39:22.803 回答
0

determinaPerechiPosibile正在修改这一行的原始数组:

colectieDePitici.splice(1, colectieDePitici.length);

特别是,它正在删除除第一个元素之外的所有元素。您可能应该使用slice非破坏性方式提取要递归的数组部分。

于 2013-10-24T00:01:12.747 回答
0

正如 Ted Hopp 提到的,问题似乎出在这条线上

colectieDePitici.splice(1, colectieDePitici.length);

结合这一行:

determinaPerechiPosibile(colectieDePiticiCopy);

如果这两行被注释掉,则数组保持其原始长度。

于 2013-10-24T00:17:00.157 回答