Проверьте чередующиеся числа и логические значения в аргументах
Я хочу иметь возможность проверить аргументы объекта для конкретных типов переменных объектов, например:
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