我对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"]
提前感谢您的帮助! :-(
你可能想推送:
for(let i=0; i <arrA.length; i++){
if (2*prevEntry == arrA[i]){
prevEntry *= 2;
arrB.push((Math.pow(arrA[i], 2)).toString());
}
}
当您将元素添加到特定索引处的数组时,每个以前未定义的索引都将使用未定义的值进行初始化。
例如,当您有
var array = [];
array[3] = 1
控制台日志将提供输出
[undefined, undefined, undefined, 1]
所以解决方案是,正如 Jonas 所写,简单地将元素推送到数组中,而不是将它们插入特定索引处。
由于这一行2*prevEntry == arrA[i]
,您的代码跳过了arrA
中的一些索引,并且由于arrA
和arrB
的索引相同,因此arrB
没有值,即未定义。不要按索引arrB
插入平方,而是使用 push()
,这只会插入平方数。
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.push(Math.pow(arrA[i], 2)).toString();
}
}
return arrB;
}
console.log(foo([2,4,6,8,9,15,16,27]));