将对象数组传递给js函数

时间:2013-10-23 23:24:26

标签: javascript oop

我第一次尝试在javascript中实现OOP,当我尝试向这个函数发送一个对象数组时,我陷入了递归函数。所以,我有一些“Pitic”课(pitic意为罗马尼亚语的侏儒),有一些道具:

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

我现在正在生成一些小部件并将它们存储在公共的piticiCollection数组变量中。 “genereazaGreutate”和“genereazaInaltime”是为inaltime和greutate值生成随机值的函数。

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

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

所以,在我调用函数之前,我有piticiCollection数组有4个对象: midgets are safe and sound http://img443.imageshack.us/img443/484/yr4f.png

一旦我用piticiCollection作为参数调用函数,我就会松开3个小部件! :( most of the midgets are gone http://img201.imageshack.us/img201/5808/7od5.png

P.S。请原谅我的英语不好..

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

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

您的determinaPerechiPosibile正在修改此行中的原始数组:

colectieDePitici.splice(1, colectieDePitici.length);

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

答案 2 :(得分:0)

正如Ted Hopp所说,问题似乎是

colectieDePitici.splice(1, colectieDePitici.length);

结合这一行:

determinaPerechiPosibile(colectieDePiticiCopy);

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