JavaScript - 如果特定索引处的元素不存在,则将null值添加到数组中

3

数组长度为7

原始数组

var arr = [2, 4, 6];

所需数组

arr = [null,null,2,null,4,null,6];
  • 数组中没有0,需要用null替换,
  • 1不可用,用null替换,
  • 2可用,将2放入新数组中,以此类推..

你真正想要解决什么问题?因为看起来你的数据结构对于你所面临的任何问题都很差。如果你描述一下你真正想要解决的实际问题,我们或许可以帮助你找到更好的数据结构类型,而不是将一个低效的数据结构转换成另一个低效的数据结构。 - jfriend00
我在使用这个来选择一周中的星期几数组,例如:周日-0,周一-1,周二-2等。用户可以在一周内选择一个或多个日期。我将所选日期的索引推入数组中。如果没有选择日期,则需要推入null值。 - PavanAsTechie
9个回答

3
您可以在数组上使用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]

这会修改原始数组。

该操作会对原始数组进行更改。


2

我很快会为所有答案编写一个永久性案例。

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]

感谢 @samir,非常好的回答。 - PavanAsTechie

1

你只需要在数组中找到最大值,然后从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/


正如我在评论中提到的,我想知道你实际要解决的问题是什么,因为似乎原始数据结构和新创建的数据结构都是低效的结构,可能需要使用不同形式的数据才能更有效地工作。但是,只有在你解释实际问题而不仅仅是尝试解决方案时,我们才能帮助你做出更明智的选择。


0

假设您有唯一的输入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];

0
var arr = [2, 4, 6];
var result = new Array(7);
arr.forEach(function(a) { result[a] = a;});

0

有趣的测验:

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]

这种方法适用于由随机数量的排序整数组成的数组。


0
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);

0

尝试:

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))


0

尝试使用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 ]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接