2013-10-23 80 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