JavaScript定义数组大小并从另一个数组克隆

时间:2014-09-29 07:17:10

标签: javascript arrays

这是我的以下代码:

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

我想输出numberOfQuestions的数组大小,然后复制到numberOfQuestions数组。如果先前的数组较大,则此方法有效。但是如果数组先前较小并且我想要声明一个更大的数组(其余部分未定义')该怎么办?我应该这样做吗?或者上面的代码就足够了。

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

但这与前面的代码相同。我该怎么办呢?感谢。

2 个答案:

答案 0 :(得分: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的新数组。复制现有值,如果您尝试使用未定义的值,您将获得错误

答案 1 :(得分: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,如您所愿。< / p>

如果您确实需要复制原始数组,仍然可以使用.slice来执行此操作:

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