我第一次尝试在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行,我就会松散数组项。
答案 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);
如果这两行被注释掉,则数组保持其原始长度。