argsort cортировка в javascript
Как реализовать такую сортировку? Например у нас есть масив [3, 1, 2], в результате мы должны получить такое: [1, 2, 0].
объяснение: наименьший элемент в нас = 1, в масиве он находитса под индексом - 1. Потом 2, индекс = 2. И наконец наибольшее значение = 3 і оно первое есть индекс = 0. P.S. Я хочу получить аналог argsort как в python но только в js. |
jsNotGuru,
элементы все уникальны или есть повторы? |
могут быть повторы.
|
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(", ")); |
Спс!!!!
|
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])) |
Яростный Меч,
:victory: твой вариаант проще :) |
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])); |
Часовой пояс GMT +3, время: 21:17. |