While solving a problem to find missing numbers from an array.
let arr = [15,3,5,6,7,2,1,8,12];
let findMissing = (arr)=>{
let res = arr.reduce((acc,n)=>{
acc[n]=1;
return acc;
},[])
return [...res.keys()].filter((i)=>{
if(res[i]!==1) return i
})
}
console.log(findMissing(arr));
output:[4, 9, 10, 11, 13, 14]
Issue is why output does not have zero in it: [0,4, 9, 10, 11, 13, 14]
2
Answers
because you return
i
in the filter method (you return 0).i === 0
&&0 == false
it is filtered out because when returning a falsy value for a filter function it will strip it.if you return
true
like in my example it works.Alternatively,
findMissing()
can be written as a one-liner, using.reduce()
and.includes()
:However, the performance could be improved by creating a Set
s
fromarr
withs=new Set(arr)
and then using!s.has(i)
instead of!arr.includes(i)
inside thereduce()
callback function.