2014-09-29 116 views
1

定義的數組大小和克隆這是我下面的代碼:的JavaScript從另一個陣列

customQuestionnaire['questions'] = customQuestionnaire['questions'].slice(0,numberOfQuestions); 

我要輸出numberOfQuestions數組大小,但複製高達numberOfQuestions陣列上。如果數組以前更大,這將起作用。但是,如果數組以前更小,我想聲明一個更大的數組(其餘部分是'undefined')呢?我應該這樣做嗎?或者上面的代碼就足夠了。

var temp = customQuestionnaire['questions'].slice(0,numberOfQuestions); 
customQuestionnaire['questions'] = new Array(numberOfQuestions); 
customQuestionnaire['questions'] = temp.slice(); 

但是看起來和前面的代碼一樣。我應該怎麼做呢?謝謝。

回答

0

我會建議填充數組的其餘部分,直到具有未定義值的所需長度。例如:

var numberOfQuestions = 10; 
var arr = [1,2,3,4,5]; 
var result = arr.slice(0,numberOfQuestions); 

if(numberOfQuestions > arr.length){ 
    var interations = numberOfQuestions - arr.length; 
    for(var i =0; i< interations; i++){ 
     result.push(undefined); 
    } 
} 
console.log(result); 

這個例子的輸出是:

[1, 2, 3, 4, 5, undefined, undefined, undefined, undefined, undefined] 

所以你有numberOfQuestions的長度的新數組。複製現有值,如果嘗試使用未定義的值,您將得到錯誤

0

使用temp var的代碼不會執行與原始代碼不同的任何操作。

// This creates a copy of the array stored in customQuestionnaire['questions'] 
// and stores it in temp 
var temp = customQuestionnaire['questions'].slice(0,numberOfQuestions); 

// this creates a new empty array with a length of numberOfQuestions and 
// stores it in customQuestionnaire['questions'] 
customQuestionnaire['questions'] = new Array(numberOfQuestions); 

// this creates a copy of the array stored in temp (itself a copy) and 
// immediately overwrites the array created in the last step with this copy of 
// the array we created in the first step. 
customQuestionnaire['questions'] = temp.slice(); 

使用.slice創建您所呼叫的方法數組的一個副本,但因爲你會立即覆蓋陣列,我假設你並不需要保存的customQuestionnaire['questions']原始值。

最簡單(也可能是最有效)的方法來完成你想要的只是簡單地調整數組的.length property

customQuestionnaire['questions'].length = numberOfQuestions; 

如果numberOfQuestions比數組的長度短,這將在陣列截斷到numberOfQuestions問題。如果numberOfQuestions比數組長,則該數組將變爲包含numberOfQuestions項目的數組,則超出原始數組長度的項目將按照您的需要爲undefined

如果您確實需要原數組複製,你仍然可以使用.slice做到這一點:

var questionnaire = customQuestionnaire['questions'].slice(); 
questionnaire.length = numberOfQuestions; 
// do something with questionnaire