这是我的以下代码:
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();
但这与前面的代码相同。我该怎么办呢?感谢。
答案 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