Why this code giving me NaN as an output???
var rob = function(nums) {
var a = 0;
var b = 0;
for (let i = 0; i < nums.length; i ) {
a = nums[i] nums[i 2]
b = nums[i 1] nums[i 2]
}
return a
};
console.log(rob([1, 2, 3, 1]));
CodePudding user response:
You iterate through the array nums
and then trying to access its members beyond its last element.
When i
is 3
, nums[i 2]
refers to nonexisting element, yielding undefined
, and when you add a number to undefined
, you get NaN
.
CodePudding user response:
There are four items in the array [1, 2, 3, 1]
. The issue is i 2
.
In third iteration of the loop, you are trying to access an index that doesn't exist: nums[i 2]
in third iteration becomes nums[2 2]
, which becomes nums[4]
. But nums[3]
is the last item, because the array length is only 4
CodePudding user response:
When i
, the index of the array nums
is out of bounds nums[i]
is undefined
. And when you add any undefined
to any number or NaN
the result is NaN
.
You can use nums[i 2] || 0
and nums[i 1] || 0
to avoid dealing with undefined
. If your aim is to sum all elements with an even index, 0,2 ..., and put the result in a
, a better approach might be as below. For a larger array you run the danger of adding some elements to the result more than once.
However, if that's your goal then you can retain nums[ 2] || 0
and nums[i 1] || 0
.
const rob = function(nums) {
let a = 0;
let b = 0;
for (let i = 0; i < nums.length; i = i 2) {
a = nums[i];
b = nums[i 1] || 0;
}
return a;
};
console.log(rob([1, 2, 3, 1]));