Проверьте чередующиеся числа и логические значения в аргументах

Я хочу иметь возможность проверить аргументы объекта для конкретных типов переменных объектов, например:

number, boolean, number, boolean ==> 1, true, 2, false....etc

Я попробовал это (после того, как я превратил объект arguments в массив):

var check = args.some ( function (val, i) {
  var type = typeof(val);
  return i % 2 == 0 ? type === 'number' : type === 'boolean';
});

Возможно ли это с помощью метода some?

1 ответ

Решение

Вы можете проверить с Array#every и массив для типов.

every метод выполняет предоставленный callback Функция один раз для каждого элемента, присутствующего в массиве, пока не найдет тот, где callback возвращает ложное значение. Если такой элемент найден, каждый метод немедленно возвращает false, В противном случае, если callback возвращает истинное значение для всех элементов, every возвращается true, callback вызывается только для индексов массива, которым присвоены значения; он не вызывается для индексов, которые были удалены или которым никогда не присваивались значения.

function isAlternate(v, i) {
    console.log(i, v, ['number', 'boolean'][i % 2], typeof v === ['number', 'boolean'][i % 2]);
    return typeof v === ['number', 'boolean'][i % 2];
}

console.log([1, 2, 3].every(isAlternate));
console.log([1, true, 2, false].every(isAlternate));
console.log([null, null].every(isAlternate));
.as-console-wrapper { max-height: 100% !important; top: 0; }

function check(array) {
    return array.every(function (v, i) {
        if (typeof v === ['number', 'boolean'][i % 2]) {
            return true;
        }
        console.log('wrong item found at', i);
    });
}

console.log(check([1, 2, 3]));
console.log(check([1, true, 2, false]));
console.log(check([null, null]));
.as-console-wrapper { max-height: 100% !important; top: 0; }

С ES6 вы можете использовать Array#findIndex

function getWrongIndex(array) {
    return array.findIndex((v, i) => typeof v !== ['number', 'boolean'][i % 2]);
}

console.log(getWrongIndex([1, 2, 3]));           //  1
console.log(getWrongIndex([1, true, 2, false])); // -1 no wrong index found
console.log(getWrongIndex([null, null]));        //  0

Другие вопросы по тегам