Array # indexOf выполняет строгое равенство только для поиска значения, так как "2" === 2
и "3" === 3
равны false
, тогда myArray.indexOf(i)
возвращает -1
для i
, имеющегозначение 2
или 3
.
Если вы хотите просмотреть массив смешанных типов только для одного типа, то, вероятно, проще сначала создать массив только одного типа:
var myArray = ["2", "3", 5]
var found = [];
var range = 10;
//convery all to numbers
myArray = myArray.map(Number);
for (var i = 1; i < range; i++) {
if (myArray.indexOf(i) === -1) {
found.push(i);
}
}
console.log(found);
В качестве альтернативы, если массив должен оставаться со смешанными типами, вы можете использовать .some
для проверки наличия и логики питания, которая не зависит оттипы:
var myArray = ["2", "3", 5]
var found = [];
var range = 10;
for (var i = 1; i < range; i++) {
//lookup using loose equals
var inArray = myArray
.some(item => item == i);
if (!inArray) {
found.push(i);
}
}
console.log(found);