Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.01.2016, 13:09
Новичок на форуме
Отправить личное сообщение для jsNotGuru Посмотреть профиль Найти все сообщения от jsNotGuru
 
Регистрация: 15.01.2016
Сообщений: 3

argsort cортировка в javascript
Как реализовать такую сортировку? Например у нас есть масив [3, 1, 2], в результате мы должны получить такое: [1, 2, 0].
объяснение: наименьший элемент в нас = 1, в масиве он находитса под индексом - 1. Потом 2, индекс = 2. И наконец наибольшее значение = 3 і оно первое есть индекс = 0.
P.S. Я хочу получить аналог argsort как в python но только в js.
Ответить с цитированием
  #2 (permalink)  
Старый 15.01.2016, 13:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

jsNotGuru,
элементы все уникальны или есть повторы?
Ответить с цитированием
  #3 (permalink)  
Старый 15.01.2016, 13:22
Новичок на форуме
Отправить личное сообщение для jsNotGuru Посмотреть профиль Найти все сообщения от jsNotGuru
 
Регистрация: 15.01.2016
Сообщений: 3

могут быть повторы.
Ответить с цитированием
  #4 (permalink)  
Старый 15.01.2016, 13:36
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

var arr = [3, 1, 2];
var result = arr.map(function(a, i) { return i; }).sort(function(a, b) { return arr[a] - arr[b]; });
alert(result.join(", "));
Ответить с цитированием
  #5 (permalink)  
Старый 15.01.2016, 13:43
Новичок на форуме
Отправить личное сообщение для jsNotGuru Посмотреть профиль Найти все сообщения от jsNotGuru
 
Регистрация: 15.01.2016
Сообщений: 3

Спс!!!!
Ответить с цитированием
  #6 (permalink)  
Старый 15.01.2016, 13:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

jsNotGuru,
function fn(c) {
    var d = {};
    return c.slice().sort(function(a, b) {
        return a - b
    }).map(function(a) {
        var b = d[a] || 0,
            b = c.indexOf(a, b);
        d[a] = b + 1;
        return b
    })
};
alert(fn([3, 1, 2]))
alert(fn([3, 3, 1, 2]))
Ответить с цитированием
  #7 (permalink)  
Старый 15.01.2016, 13:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Яростный Меч,
твой вариаант проще
Ответить с цитированием
  #8 (permalink)  
Старый 15.01.2016, 16:14
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

function sortInd(arr) {
				var isSort, arrInd = [], i, len, temp;
				
				for (i = 0, len = arr.length; i < len; i++) {
					arrInd.push(i);
				}
				do {
					isSort = true;
					for(i = 0; i < len - 1; i++) {
						if (arr[i] > arr[i + 1]) {
							isSort = false;
							temp = arr[i];
							arr[i] = arr[i + 1];
							arr[i + 1] = temp;
							temp = arrInd[i];
							arrInd[i] = arrInd[i + 1];
							arrInd[i + 1] = temp;
						}
					}
				} while (isSort);
				return arrInd;
			}
			alert(sortInd([3, 1, 2]));
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книга: JavaScript. Сильные стороны Magneto Учебные материалы 16 21.04.2013 15:28
Интерпретатор Java на JS kobezzza Оффтопик 24 11.10.2012 18:32
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 15:23
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34