数组长度为7
原始数组
var arr = [2, 4, 6];
所需数组
arr = [null,null,2,null,4,null,6];
- 数组中没有0,需要用null替换,
- 1不可用,用null替换,
- 2可用,将2放入新数组中,以此类推..
数组长度为7
原始数组
var arr = [2, 4, 6];
所需数组
arr = [null,null,2,null,4,null,6];
splice()
方法。var arr=[2,4,6];
var l = arr[arr.length-1];
for(var i=0; i<=l; i++){
if(arr[i] !== i){
arr.splice(i, 0, null);
}
}
输出: [null, null, 2, null, 4, null, 6]
这会修改原始数组。
该操作会对原始数组进行更改。
我很快会为所有答案编写一个永久性案例。
function createArrayFromArray(array, length) {
var new_array = new Array(length);
for (var i = 0; i < new_array.length; i++) {
new_array[i] = null;
}
for (var i = 0; i < array.length; i++) {
new_array[array[i]] = array[i];
}
return new_array;
}
console.log(createArrayFromArray(arr, 7)); //[null, null, 2, null, 4, null, 6]
你只需要在数组中找到最大值,然后从0到该最大值进行迭代,检查每个值是否出现在源中:
var arr = [2, 4, 6];
var max = Math.max.apply(Math, arr);
var result = [];
for (var i = 0; i <= max; i++) {
if (arr.indexOf(i) !== -1) {
result[i] = i;
} else {
result[i] = null;
}
}
工作演示: http://jsfiddle.net/jfriend00/c7p8mkqy/
正如我在评论中提到的,我想知道你实际要解决的问题是什么,因为似乎原始数据结构和新创建的数据结构都是低效的结构,可能需要使用不同形式的数据才能更有效地工作。但是,只有在你解释实际问题而不仅仅是尝试解决方案时,我们才能帮助你做出更明智的选择。
假设您有唯一的输入arr
,您想在其中填充null。请尝试以下方法:
var arr = [2, 4, 6];
var output = [];
while (arr.length>0){
var first = arr.splice(0,1);
while (output.length<first[0])
output.push(null);
output.push(first[0]);
}
// output should be [null,null,2,null,4,null,6];
var arr = [2, 4, 6];
var result = new Array(7);
arr.forEach(function(a) { result[a] = a;});
有趣的测验:
var arr = [2, 4, 6]
var n = 0
while(arr.length > n) {
if(arr[n] !== n) {
arr = arr.slice(0,n).concat(null, arr.slice(n))
}
n++
}
console.log(arr) // [null, null, 2, null, 4, null, 6]
这种方法适用于由随机数量的排序整数组成的数组。
var arr = [2, 4, 6];
var narr = (new Array(arr.sort()[arr.length-1]))
arr.map(function(v){
narr[v] = v;
});
for (var i = 0; i<narr.length; i++) narr[i]||(narr[i]=null);
console.log(narr);
尝试:
var arr = [2, 4, 6];
var new_arr = [];
var i = 0;
while(i < 7){
var pos = arr.indexOf(i++);
new_arr.push(pos !== -1 ? arr[pos] : null)
}
document.write(JSON.stringify(new_arr, null, 4))
尝试使用splice():
var arr = [2, 4, 6];
var i = 0,
l = arr[arr.length - 1];
while (i < l) {
if(i !== arr[i])
arr.splice(i, 0, null);
i++;
}
console.log(arr); //[ null, null, 2, null, 4, null, 6 ]