2013-10-23 81 views
0

我想第一次在javascript中实现OOP,当我试图发送一个对象数组到这个函数时,我被困在一个递归函数上。所以,我有“Pitic”级(pitic意味着罗马尼亚侏儒)与一些propreties:将对象数组传递给一个js函数

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); 

的问题,当我尝试侏儒的阵列发送到功能,因为我得到的是只有数组的第一个项目出现。

所以,在我调用函数,我有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

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

[编辑] 这里是我完整的代码小提琴:http://jsfiddle.net/WT7Ud/我呼吁管线56中的功能,并尽快调试器命中。线60我松散数组项

+3

你将代码传递给函数的代码在哪里?这就是我们需要看到的。你如何创建数组,如何将它传递给函数以及如何访问它在函数内部 – jfriend00

+0

@fDruga尝试传递一个内联数组并检查你得到的内容'''determinaPerechiPosibile([1,2,3,4]);' – plalx

+0

@ jfriend00在screenShot1中可以看到数组填充了传递给函数“determinaPerechiPosibile”在screenShot 2中,你可以看到这个函数,我使用for创建了一个数组并使用代码piticiCollection.push(pitic)添加了Pitic对象; – fDruga

回答

1

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

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); 
} 
0

determinaPerechiPosibile正在修改该线路上的原始阵列:

colectieDePitici.splice(1, colectieDePitici.length); 

特别地,在去除所有但第一个元素。您可能应该使用slice以非破坏性方式提取您想要执行的数组部分。

+0

splice被调用后,我检查我的数组的完整性。我评论了这条线,但仍然遇到了这个问题。 – fDruga

0

如泰德霍普所提到的,这个问题似乎是线

colectieDePitici.splice(1, colectieDePitici.length);

在与此线组合:

determinaPerechiPosibile(colectieDePiticiCopy);

如果这两条线被注释掉,阵列保持其原始长度。

+0

好的,拼接不是问题。我定义了一个名为test的新函数并传递了数组。它运行良好。我添加了并再次打断它。我再次写了函数,它的工作原理..当然,我不得不修改splice来拼接(0,1),但我再说一遍......甚至在代码碰到拼接函数之前,我的数组被破坏了。对我来说,它仍然是一个神秘的,我现在称它为一天..谢谢你的答复,但.. – fDruga