繁体   English   中英

将对象数组传递给js函数

[英]Passing array of objects to a js function

我正在尝试第一次在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 是安全和健全的http://img443.imageshack.us/img443/484/yr4f.png

一旦我用piticiCollection作为参数调用函数,我就会松开3个小部件! :( 大多数小部件都没了http://img201.imageshack.us/img201/5808/7od5.png

请原谅我的英语不好..

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

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

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

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

colectieDePitici.splice(1, colectieDePitici.length);

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

正如Ted Hopp所说,问题似乎就在于此

colectieDePitici.splice(1, colectieDePitici.length);

结合这一行:

determinaPerechiPosibile(colectieDePiticiCopy);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM