Объясните работу функции, пожалуйста! [требует правки]

56
12 января 2017, 07:17
var arr = ['bla','hahahah','123456789','1','ew'];
function lensort(a,b)
{
    var s1 = "" + a; // Что это за переменная?
    var s2 = "" + b; // а это?
    if(s1.length < s2.lenght){
        return false;  
    } 
    else if(s1.length > s2.length){
        return true;
    }
}
console.log(arr.sort(lensort)) --> arr["1", "ew", "bla", "hahahah", "123456789"]

как эта функция отсортировала массив по длине его элементов?

Answer 1

Как описан Grundy, тут основной момент играет использование метода sort. По сути, функция lensort представляет собой "критерий выбора". Т.е. метод sort отдает методу lensort 2 значения. Т.е. на первом шаге оно выдало в метод lensort значения arr[0] и arr[1] ( 'bla','hahahah'). Далее помечу в коде что и как:

 function lensort(a,b)
 {
    var s1 = "" + a; // Это первый параметр или arr[0]
    var s2 = "" + b; // это второй параметр или arr[1]
    // по сути тут мы однозначно получаем строки s1 и s2 типа string 
    if(s1.length < s2.lenght){
        return false;  // элементы на своих позициях по возрастанию
    } 
    else if(s1.length > s2.length){
        return true; // элемент arr[0] больше и его мы будет "двигать" вправо по массиву
    }
}

В итоге, когда ваша функция lensort возвращает true, то метод sort делает решение что первый элемент "больше" второго и смешает его правее. И дальше итерация перемещается дальше и сравнивает другие 2 значения, например arr[1] и arr[2] (в зависимости от алгоритма, могут сравниваться первый элемент со всеми оставльными, или методом пузырька и т.п. смотрите "алгоритмы сортировки")

Answer 2
var s1 = "" + a;

так делают чтобы получить строку в любом случае, то есть если там будет 123456789 то оно может быть как string так и int, чтобы оно однозначно имело тип string делают такую хитрую операцию, таких хитростей много, например если мы хотим иметь всегда какое-то значение то делаем так

var s = object.param || "строка";

и тогда даже если string будет object.param не будет существовать в переменной s будет значение "строка" ,а не undefined.

READ ALSO
Остановка (пауза) видео Youtube

Остановка (пауза) видео Youtube

Помогите чайникуСитуация такова: модальное окно на CSS, в нем карусель видео с ютуба, при закрытии модали - воспроизведение продолжается

72
Задачка с сортировкой массива

Задачка с сортировкой массива

Есть такой массив объектов

88
Как вставить элемент из переменной

Как вставить элемент из переменной

В переменной b хранится клон объекта span и вместо того чтобы вставился элемент Текст вставляется вот это [object Object]

120