Как найти число в массиве JavaScript
Допустим есть некий массив ['r', 'b', '2', 'd'], понятно что в данном случае цифра = строка, в том и суть, как прогнать массив так, чтобы он нашел цифру и вернул true или false если не нашел?
Ответы (6 шт):
вариант 1:
let arr = ['r', 'b', '2', 'd']
const res = arr.filter(elem => elem.localeCompare(String(+elem)) == 0).length != 0
вариант 2:
let arr = ['r', 'b', '2', 'd']
const res = arr.some(elem => elem.localeCompare(String(+elem)) == 0)
проверку на число можно сделать и потяжелее:
function isNumeric(str) {
if (typeof str != "string") return false
return !isNaN(str) && !isNaN(parseFloat(str))
}
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
const arr = ['r', 'b', '2', 'd']
const number = 2
const isTrue = arr.includes(number+'')
// true
console.log(isTrue)
Давай по порядку. Сначала перебираем массив(допустим с помощью метода forEach).
const arr = ['r', 'b', '2', 'd'];
arr.forEach(item => {
.......
})
Теперь нам надо написать функционал, который поймёт число ли это
function isNumber(n) {
........
}
Чтобы узнать тип, можем использовать typeof. Но проблема в том, что typeof '5' вернёт string.
Можем использовать конструктор Number(item) . Тогда число трансформируется в число('5' => 5), а строка в NaN('a' => NaN).
В JS есть функция isNaN() результат которой мы будем возвращать. Итоговый код будет выглядеть так:
const arr = ['r', 'b', '2', 'd'];
arr.forEach(item => {
isNumber(item);
})
function isNumber(n) {
return !isNaN(Number(n));
}
var a = ['r', 'b', '2', 'd', '0']
console.log(a.filter(x => x == +x))
console.log(a.find(x => x == +x))
console.log(+a.find(x => x == +x))
isNaN сработает как и с '2', так 2. Можно использовать его с map() и получить данные для всего массива:
['r', 'b', '2', 'd'].map(value => { return !isNaN(value); })