2014-12-06 68 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