Как проверить что все элементы подмассива принадлежат одному типу в js
Подскажите как проверить что все элементы подмассива принадлежат одному типу в js.
[['', 'qwerty'], [65, 98, 13], [''], ['', '1'], ['', 1], []]
Ответы (2 шт):
Автор решения: Alexander Lonberg
→ Ссылка
const arrs = [['', 'qwerty'], [65, 98, 13], [''], ['', '1'], ['', 1], []]
const res = arrs.map((item) => {
if (item.length < 2) return true
const [first, ...items] = item
return items.every((i) => typeof i === typeof first)
})
console.log(res)
UPD: для скорости на больших массивах лучше так
const res3 = arrs.map((item) => {
for (let i = 1; i < item.length; ++i) if (typeof item[0] !== typeof item[i]) return false
return true
})
Автор решения: yar85
→ Ссылка
Предыдущий ответ верен, но слегка переусложнен - поэтому, вот то же самое решение в более простом (учебном) варианте:
const arrs = [['', 'qwerty'], [65, 98, 13], [''], ['', '1'], ['', 1], []];
const res = arrs.map(([firstItem, ...restItems]) => (
restItems.every(item => typeof item === typeof firstItem)
));
console.log(res);
Когда метод every вызван от пустого массива, он возвращает true - такое поведение и логично, и закреплено стандартом ES. Поэтому, здесь не обязательна предварительная проверка количества элементов, без нее результат тоже будет корректным (существует общее правило: дублирований стандартного поведения своим кодом лучше избегать, по мере возможности).