Оператор typeof обработка массива JavaScript

195
11 ноября 2018, 15:20

function isNumber(val) { 
    return typeof val === 'number'; 
} 
let allNumbers = [1, 2, 4, 5, 6, 7, 8] 
console.log(isNumber(allNumbers))

При обработке массива выдает false. Если написать содержимое массива в виде аргументов, то true.

Как обработать числовой массив, чтобы метод вернул true?

Answer 1

Для обработки массива Вам потребуется немного иной подход)

Функция не срабатывает для каждого аргумента переданного массива отдельно. Она отрабатывает, как ей и полагается, для одного переданного значения

В Вашем случае, когда Вы отдаете ей массив, то получаете следующую картину:

function isNumber(val) { 
    console.log(typeof val); // object 
    return typeof val === 'number'; 
} 
let allNumbers = [1, 2, 4, 5, 6, 7, 8]; 
console.log(isNumber(allNumbers)); // false

Чтобы проверить, все ли элементы массива удовлетворяют заданному условию, Вам следует использовать метод Array.prototype.every(), который как раз таки

проверяет, удовлетворяют ли все элементы массива условию, заданному в передаваемой функции.

Приведу простенький пример:

function isNumber(val) { 
    return typeof val === 'number'; 
} 
// Обозначим функцию для обработки массива 
function areNumbers(arr) { 
    // Передадим в every() лямбду, которая принимает элемент массива и возвращает bool 
    return arr.every(x => isNumber(x)); 
    // Или короче: 
    // return arr.every(isNumber); 
} 
let allNumbers = [1, 2, 4, 5, 6, 7, 8]; 
console.log(areNumbers(allNumbers)); // true

Надеюсь, мой ответ помог Вам разобраться в Вашей проблеме!
Удачи в Ваших начинаниях!

Answer 2

Ты передаешь в функцию массив чисел, а у массивов в JS тип "object". Используй метод массива "forEach" для обработки каждого элемента отдельно

READ ALSO
Как запускать плагин Typit.js только по клику

Как запускать плагин Typit.js только по клику

Есть такой плагин, называется TypeItЯ хочу сделать меню на сайте, с эффектом печатающегося текста

186