i have following JavaScript code
const evenLast = arr => {
return arr.filter((a,idx) => {
if(!(idx&1)) return (a * arr[arr.length-1])
})
}
console.log(evenLast([2, 3, 4, 5]))
and in the console i get [2,4] instead of [10, 20]
i want to know why
if(!(idx&1)) return (a * arr[arr.length-1])
returns (a) not (a * last item) of array
thanx in advance
>Solution :
This should solve it:
function main(arr){
return arr.reduce((total, a, idx) => {
if(!(idx & 1)){
total.push(a * arr[arr.length - 1]);
}
return total;
}, []);
}
Why it happened is because filter evaluates the callback’s result and based on what it receives, it either includes the item at current index or not. So your instruction in if statement will always evaluate to true regardless of which index, (an edge case where the item at index is zero) therefore only includes the item as opposed to perform what you are intending to