Javascript 空插槽如何显示在阵列中?

Javascript 空插槽如何显示在阵列中?,javascript,arrays,undefined,Javascript,Arrays,Undefined,我对javascript非常陌生,我无法确定在哪一点将未定义的对象插入我的数组: 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]) { prevEnt

我对javascript非常陌生,我无法确定在哪一点将
未定义的
对象插入我的数组:

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]);
提前感谢您的帮助!:-)

您可能需要推送:

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

for(设i=0;i当您在特定索引处向数组添加元素时,以前未定义的每个索引都将使用未定义的值初始化

例如,当你

var array = [];
array[3] = 1
控制台日志将提供一个输出

[undefined, undefined, undefined, 1]

因此,正如Jonas所写,解决方案是简单地将元素推送到数组中,而不是在特定的索引处插入它们。

由于这一行
2*prevEntry==arrA[i]
,您的代码跳过了
arrA
中的一些索引,并且由于
arrA
arrB
的索引相同,
arrB
没有值,即未定义。使用
push()
代替按索引在
arrB
中插入平方,这将只插入平方数

函数foo(arrA){
如果(!arrA | | arrA[0]==0)
返回未定义;
设arrB=[];
设预防性=1;

for(设i=0;i if表示不在每个ArrA处向ArrB设置值。因此,如果(2*prevEntry==ArrA[i]),则存在空位置
if{
这一行。当你不知道它在哪里崩溃时,坚持使用一个带有“break”的try-catch块,或者在日志中打印变量“i”。正如前面提到的那样,推送将解决它。哦,我的天啊……对不起,这是一个愚蠢的错误!我自己应该看到的。在node.js中,它看起来不同:
[,1]
和在Opera中-
[空×3,1]
[undefined, undefined, undefined, 1]