Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.02.2017, 11:35
Интересующийся
Отправить личное сообщение для Zmicer Посмотреть профиль Найти все сообщения от Zmicer
 
Регистрация: 24.02.2017
Сообщений: 20

Сортировка массива, возможно ли?
Здравствуйте!
Имеется одномерный массив, следующего, примерно, вида:

arr [0] = "1 + 2 =3"
arr [1] = "3* 2 =6"
arr [2] = "2+5 =7"
arr [3] = "1 +2=3"

Там разное количество пробелов между знаками, к тому же (после знака "=" пробелов нет). Нужно сортировать по второму значению, а также - по ответу. Интуитивно я догадываюсь, что такая сортировка возможна. Однако сказывается нехватка опыта. Не могли бы уважаемые Гуру наставить на путь истинный, желательно не слишком усложняя алгоритм? Заранее спасибо за ответ!

Последний раз редактировалось Zmicer, 27.02.2017 в 11:39.
Ответить с цитированием
  #2 (permalink)  
Старый 27.02.2017, 11:53
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

function getTwoValue(exp) {
   var matches = /^\d+\s*[\/*%+-]\s*(\d+)/.exec(exp);
   return matches ? matches[1] : 0;
}

function sortByTwoValue(a, b) {
   a = getTwoValue(a);
   b = getTwoValue(b);

   return a < b ? -1 : +(a > b);
}

var arr = [];
arr [0] = "1 + 2 =3"
arr [1] = "3* 2 =6"
arr [2] = "2+5 =7"
arr [3] = "1 +2=3"

arr.sort(sortByTwoValue);

console.log(arr);
Ответить с цитированием
  #3 (permalink)  
Старый 27.02.2017, 11:54
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,251

Zmicer, у метода sort() можно использовать т.н. сорт-функцию.
В ней ты и определишь нужный тебе порядок сортировки
http://javascript.ru/array/sort
Ответить с цитированием
  #4 (permalink)  
Старый 27.02.2017, 11:56
Интересующийся
Отправить личное сообщение для Zmicer Посмотреть профиль Найти все сообщения от Zmicer
 
Регистрация: 24.02.2017
Сообщений: 20

Спасибо, Ruslan_xDD!
А не могли бы Вы кратко прокомментировать этот код, а то у меня какой-то когнитивный диссонанс наступил
Ответить с цитированием
  #5 (permalink)  
Старый 27.02.2017, 12:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,144

Сообщение от Zmicer
сортировать по второму значению, а также - по ответу.
<script>
function getTwoValue(exp) {
  return exp.match(/(\-?\d+)/g);
}

function sortByTwoValue(a, b) {
  a = getTwoValue(a);
  b = getTwoValue(b);

  return +a[1] - +b[1] || +a[2] - +b[2];
}

var arr = [];
arr [0] = "1 + 2 =3"
arr [1] = "3* 2 =6"
arr [2] = "2+5 =7"
arr [3] = "1 +2=3"

arr.sort(sortByTwoValue);
document.write(JSON.stringify(arr))

  </script>
Ответить с цитированием
  #6 (permalink)  
Старый 27.02.2017, 12:34
Интересующийся
Отправить личное сообщение для Zmicer Посмотреть профиль Найти все сообщения от Zmicer
 
Регистрация: 24.02.2017
Сообщений: 20

Сообщение от рони
 return +a[1] - +b[1] || +a[2] - +b[2]
Спасибо! А что делает эта волшебная строка?
Ответить с цитированием
  #7 (permalink)  
Старый 27.02.2017, 12:43
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Сообщение от Zmicer
А не могли бы Вы кратко прокомментировать этот код,
Нет
Ответить с цитированием
  #8 (permalink)  
Старый 27.02.2017, 12:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,144

Zmicer,
возвращает условно -1(отрицательное число) или 1(положительное число) или 0 -- смотреть пост №3 или свой-порядок-сортировки
сначала сравнивает по второму значению +a[1] - +b[1] если результат ноль переходит к сравнению по ответу +a[2] - +b[2] -- волшебство возможно только для чисел для строк придётся писать чуть больше

Последний раз редактировалось рони, 27.02.2017 в 12:53.
Ответить с цитированием
  #9 (permalink)  
Старый 27.02.2017, 13:05
Интересующийся
Отправить личное сообщение для Zmicer Посмотреть профиль Найти все сообщения от Zmicer
 
Регистрация: 24.02.2017
Сообщений: 20

Спасибо, рони. Теперь более-менее понятно. Попробую сделать сам что-нибудь в этом роде. А не могли бы Вы пояснить подробнее это регулярное выражение: return exp.match(/(\-?\d+)/g)
Ответить с цитированием
  #10 (permalink)  
Старый 27.02.2017, 13:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,144

Zmicer,
выделить из строки всё похожее на число или отрицательное число
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива по возрастанию другого массива. vas88811 Events/DOM/Window 4 12.01.2014 10:31
Сортировка массива grindy Общие вопросы Javascript 5 17.12.2013 08:41
Сортировка массива по ключу RazZzeR Элементы интерфейса 9 21.07.2012 19:31
Скажите, а возможно ли вычислить максимальное значение массива? Solovei95 Общие вопросы Javascript 5 28.01.2012 13:46
сортировка массива с сохранением ассоциации индексов HelpeR Элементы интерфейса 1 24.02.2010 11:00