如何在数组中出现空槽?

时间:2017-07-01 11:50:40

标签: javascript arrays undefined

我是javascript的新手,我无法找到undefined对象插入到我的数组中的位置:

function foo(arrA){
  if(!arrA || arrA[0] === 0)
       return undefined;

  let arrB = [];
  let prevEntry = 1;

  for(let i=0; i < arrA.length; i++) {
      if (2*prevEntry == arrA[i]) {
          prevEntry *= 2;
          arrB[i] = (Math.pow(arrA[i], 2)).toString();
      }
  }

  return arrB;
}

foo([2,4,6,8,9,15,16,27]);

作为输出,我得到一个功率为2的数组,正如预期的那样,但它与undefined个对象隔行扫描,我只是不明白为什么。

(7) ["4", "16", undefined × 1, "64", undefined × 2, "256"]

提前感谢您的帮助! : - )

3 个答案:

答案 0 :(得分:1)

您可能想要推送:

for(let i=0; i <arrA.length; i++){
  if (2*prevEntry == arrA[i]){
    prevEntry *= 2;
    arrB.push((Math.pow(arrA[i], 2)).toString());
  }
}

答案 1 :(得分:0)

当您在特定索引处向元素添加元素时,每个未定义的先前索引都会使用未定义的值进行初始化。

例如,当你有

var array = [];
array[3] = 1

控制台日志将提供输出

[undefined, undefined, undefined, 1]

因此,正如Jonas所写的那样,解决方案只是将元素推送到数组而不是将它们插入特定的索引。

答案 2 :(得分:0)

由于此行2*prevEntry == arrA[i],您的代码正在跳过arrA中的一些索引,并且由于arrAarrB的索引相同,{{1没有价值,即那里未定义。不是通过索引在arrB中插入方格,而是使用arrB,这只会插入平方数。

&#13;
&#13;
push()
&#13;
&#13;
&#13;