У меня есть массив как array = [9,0,0,1,0,5,1,3,1]. Я хочу отсортировать этот массив и получить индексы отсортированных элементов массива как другой массив.

То есть . после сортировки:

sortedArray = [0,0,0,1,1,1,3,5,9]
indexArray = [1,2,4,3,6,8,7,5,0]

Есть ли способ получить индексы отсортированного массива?

-1
salsa111 16 Дек 2015 в 12:54

4 ответа

Лучший ответ

Вы можете попробовать что-то вроде этого:

(function() {
  var arr = [9, 0, 0, 1, 0, 5, 1, 3, 1];

  var _temp = arr.map(function(item, index) {
    return {
      index: index,
      value: item
    }
  });

  console.log(_temp)

  _temp.sort(function(a, b) {
    if (a.value < b.value) return -1;
    if (a.value > b.value) return 1;
    return 0;
  });

  console.log(_temp)

  console.log(_temp.map(function(item) {
    return item.value
  }))
  console.log(_temp.map(function(item) {
    return item.index
  }))
})()
1
Rajesh 16 Дек 2015 в 10:06

Что-то вроде этого?

var array = [9,0,0,1,0,5,1,3,1];
var indexArray = [];

for (var i = 0; i < array.length; ++i) {
    indexArray.push(i);
}

var sortedArray = array.sort();

console.log(sortedArray);
console.log(indexArray);
-1
michelem 16 Дек 2015 в 10:03

Поскольку в массиве нет связи между индексом и значением, вам нужно сначала установить это:

var tmp = array.map(function (val, i) { return [i, val]; });
// [[0, 9], [1, 0], ..]

Затем вы сортируете это:

tmp.sort(function (a, b) { return a[1] - b[1]; });

Затем вы извлекаете индексы и / или значения снова:

var indexArray = tmp.map(function (i) { return i[0]; });
1
deceze 16 Дек 2015 в 10:03

Имея sortedArray, вы можете циклически перемещаться по массиву и использовать метод indexOf(), чтобы получить индекс каждого элемента отсортированного массива в старом массиве. Например.

sortedArray.forEach(function(ele){
  indexArray.push(oldArray.indexOf(ele));
});
-1
Alizoh 16 Дек 2015 в 10:03