function isSorted(arr) {
const limit = arr.length - 1;
return arr.every((_, i) => (i < limit ? arr[i] <= arr[i + 1] : true));
}
Функция работает, как я её понимаю и не понимаю:
i<limit говорит нам, дошли мы до конца массива или нет, если дошли, то выводит, что массив отсортирован (true), если же не дошли, то переходит на следующий элемент массива
arr[i] <= arr[i + 1]
arr.every проверяет, прошли ли все элементы массива установленное условие
а что делает (_, i) =>
Прошу ответить на 4-ый пункт как можно более понятнее, я примерно представляю, что тут происходит, но ещё не совсем, было бы хорошо показать, каким куском кода можно заменить код в пункте 4. И если я ошибся в объяснении других пунктов, тоже прошу исправить. Спасибо.
"_" - это просто символ, ничем не отличающийся от других
а что делает (_, i) =>
В данном случае "_" - это текущий элемент массива, передаваемый в callback-функцию, i - его индекс
arr.every((_, i) => (i < limit ? arr[i] <= arr[i + 1] : true));
В данном случае перебирается весь массив и проверяется, что текущий элемент меньше или равен следующему. Т.е. массив отсортирован. Когда кончаются элементы, то возвращается true
Метод every() вызывает переданную функцию callback один раз для каждого элемента, присутствующего в массиве до тех пор, пока не найдет такой, для которого callback вернет ложное значение (значение, становящееся равным false при приведении его к типу Boolean). Если такой элемент найден, метод every() немедленно вернёт false. В противном случае, если callback вернёт true для всех элементов массива, метод every() вернёт true. Функция callback вызывается только для индексов массива, имеющих присвоенные значения; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались.
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/every
Подчеркивание в JavaScript не имеет никаких "магических свойств". Просто автор так назвал параметр анонимной функции.
Метод every вызывает для каждого элемента масива переданную ему функцию. Переданная функция может принимать до 3 параметров - ЗначениеТекущегоЭлемента, ПорядковыйНомерЭтогоЭлемента, и ПеребираемыйМасив. В качестве результата эта фунция должна вернуть true или false. Если все вызовы переданной функции вернут true - every вернет true. Если хоть один вызов вернет false - every вернет false.
Если использовать обычный цикл, то аналогичный код будет выглядить так:
function isSorted(arr) {
for ( int i = 0; i < arr.length - 1 ; i++ )
{
if ( arr[i] > arr[i+1] )
{
return false;
}
}
return true;
}
Можно упростить ф-ю:
const arr = [1, 2, 3]
const arr2 = [3, 2, 1]
function isSorted (arr) {
return arr.slice(1).every((item, i) => arr[i] >= item)
}
console.log(isSorted(arr), isSorted(arr2))
Если надо циклом:
const arr = [1, 2, 3]
const arr2 = [3, 2, 1]
function isSorted (arr) {
for (let i in arr.slice(1))
if (arr[i - 1] < arr[i])
return false
return true
}
console.log(isSorted(arr), isSorted(arr2))
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости