对数组进行排序并将其索引存储在javascript中的另一个数组中

时间:2015-12-16 09:54:53

标签: javascript arrays sorting

我有一个像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]

有没有办法获得排序数组的索引?

4 个答案:

答案 0 :(得分:1)

由于数组中没有索引值关联,因此您需要首先建立:

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 :(得分:1)

您可以尝试这样的事情:



(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
  }))
})()
&#13;
&#13;
&#13;

答案 2 :(得分:-1)

这样的东西?

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);

答案 3 :(得分:-1)

使用sortedArray,您可以遍历数组,并使用indexOf()方法获取旧数组中已排序数组的每个元素的索引。例如。

sortedArray.forEach(function(ele){
  indexArray.push(oldArray.indexOf(ele));
});