2014-12-06 82 views
2

我想一個數組傳遞給一個對象:將數組傳遞給一個對象在JS

function process(pid, size, time, IOCArray, IOCtimeA, status) { 
    this.pid = pid; 
    this.size = size; 
    this.time = time; 
    this.IOCtimeA = IOCtimeA; // should i use this? 
    for (var j = 0; j < IOCArray.length; j++) { 
     this.IOCArray[j] = IOCArray[j]; 
    } // or something like this? 
    this.status = status; 
} 

proarray[ID] = new process(ID, size, time, IOCArray, IOCtimeA, status); 

現在,我怎麼能訪問例如proarray[5].IOCArray[4]? 其實我不知道如何使用「this」作爲數組。

+1

你可以只是做'this.IOCArray = IOCArray.slice(0);'? – adeneo 2014-12-06 16:51:47

+0

你有沒有試過用'proarray [5] .IOCArray [4]'來說話?你有什麼錯誤嗎? – abl 2014-12-06 16:53:49

+0

@adeneo謝謝你...它的工作 – 2014-12-06 17:03:18

回答

0

使用this.IOCtimeA=IOCtimeA;可以將參考分配給數組。如果你改變IOCtimeAproarray[ID].IOCtimeA也會改變。

使用for循環或使用@adaneo的技巧,您將複製值並在其中創建一個獨立數組。

+1

如圖所示,for循環缺少數組的初始化。它需要'this.IOCArray = []' – Paul 2014-12-06 16:55:17

+0

是的,你是對的。 – 2014-12-06 16:55:56

1

看看您提供的代碼,您建議的兩種解決方案都不理想,因爲如果將對象的屬性設置爲另一個數組,則只需設置對原始數組的引用即可。如果您要修改對象的數組屬性,那麼您也將修改原始數組。

相反,你將不得不使用的是slice()方法。這將爲您的對象創建一個新的獨立陣列副本。

例如:

this.IOCArray = IOCArray.slice();

還值得一提的是,.slice()只會讓一個數組的淺表副本。嵌套數組將設置一個對原始嵌套數組的引用,所以如果你知道你將在任何變量中嵌套數組,你還需要slice()這些嵌套數組。

Array.prototype.slice() | MDN Documentation