8toni8
@8toni8

Функция сортировки в javascript, необходимо изменить правило ортировки?

//сортировка
              $.get(URL + '/stations.json', function (data) {
                   var j1=0;
                   $.each(data, function (j1) {
                       Stations[this.sindex] = this;
                       StationsSort[j1]=this;
                       j1++;
                   });
//                   for (var i = 0; i <= StationsSort.length; i++)  {
			var date = new Date();

			dstmp=date.getTime();
                     $.each(StationsSort, function() {
			lastMsg=Math.floor(dstmp/1000)-this.last_at;
//цвет сортировки
			style=''
			if (lastMsg<10800){
				style="style=\"background: #8affbb;\"";
			}
			StationsSort.sort(function(s1,s2) {
                    if (s1.sindex>s2.sindex)
                       return 1;
					if (s1.sindex<s2.sindex)
                       return -1;
                     else
                       return 0;
                   });	   
			$('#station-list').append("<div "+style+" class='st-btn' title='"+ EncodeHTML(this.station_name) + "' onclick=\"StationProcess(this, '" + EncodeHTML(this.sindex) + "')\">" + EncodeHTML(this.sindex) +' - ' + EncodeHTML(this.station_name) + "</div>");
//                   $('#station-list').append("<div class='st-btn' title='"+ EncodeHTML(this.station_name) +            "' onclick=\"StationProcess(this, '" + EncodeHTML(this.sindex)                                        + "')\">" + EncodeHTML(this.station_name) + "</div>")
                   });
               });


Это функция и часть кода сортировки списка.
Помогите разобраться в каком месте кода вызывается функция StationsSort.sort(function(s1,s2) ?
Вот здесь "StationsSort[j1]=this;" ?
Здесь есть функция сортировки по номеру "StationsSort.sort(function(s1,s2)" и окрашивания "if (lastMsg<10800)" в зависимости от параметра lastMsg. Задача, реализовать сортировку исходя из параметра lastMsg.
Написать в функции "StationsSort.sort(function(s1,s2)", что то типо "if (lastMsg<10800)" не срабатывает, так как видимо параметр lastMsg, нужно как то передать в функцию "StationsSort.sort(function(s1,s2)", а я этого не умею делать:(
  • Вопрос задан
  • 419 просмотров
Решения вопроса 1
evgeniy8705
@evgeniy8705
Повелитель вселенной
StationsSort.sort(function(s1,s2) {
 // some code
})

Это не функция. Функцией является сам метод sort(), которому можно передать функцию как параметр, которая будет указывать как сортировать элементы. А StationsSort является объектом который нужно отсортировать. И вызывается метод sort() в данном блоке кода, а не где то еще.

Для примера:
let arr = [5, 4, 7, 2, 1, 8, 6, 0];

arr.sort((a, b) => {
	if (a < b) {
  	return -1;
  } else if (a > b) {
  	return 1;
  } else {
  	return 0;
  }
}); // [0, 1, 2, 4, 5, 6, 7, 8]


PS. Для начала приведите код в нормальный вид, согласно какому нибудь code style. Сейчас же в вашем коде черт ногу сломит.
Сделайте хотя бы так:
$.get(URL + '/stations.json', function(data) {
  var j1 = 0;

  $.each(data, function(j1) {
    Stations[this.sindex] = this;
    StationsSort[j1] = this;
    
    j1++;
  });

  var date = new Date();
  dstmp = date.getTime();

  $.each(StationsSort, function() {
    lastMsg = Math.floor(dstmp / 1000) - this.last_at;
    style = '';

    if (lastMsg < 10800) {
      style = "style=\"background: #8affbb;\"";
    }

    StationsSort.sort(function(s1, s2) {
      if (s1.sindex > s2.sindex)
        return 1;
      if (s1.sindex < s2.sindex)
        return -1;
      else
        return 0;
    });

    $('#station-list').append("<div " + style + " class='st-btn' title='" + EncodeHTML(this.station_name) + "' onclick=\"StationProcess(this, '" + EncodeHTML(this.sindex) + "')\">" + EncodeHTML(this.sindex) + ' - ' + EncodeHTML(this.station_name) + "</div>");
  });
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
kn1ght_t
@kn1ght_t
за такой кодстайл хочется покалечить)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы