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))
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть json файлы, сначала считываю их php файлом, потом скриптом пытаюсь перенести эти данные в select список, но где-то ошибкаСкрипт писал не сам,...
Всем привет, у меня затык с одним делом Мне с бека приходит информация о цене в формате min/max И как бы надо сделать сортировку по этому полю,...
Мне нужно сделать анимацию в модальном окне, которое появляется при клике на кнопкуВ приведенном ниже коде, есть пример рабочей анимации