排序后如何保持数组索引>值

时间:2017-06-18 10:03:44

标签: javascript arrays sorting

在javascript中我有下一个数组:

var a = [0, 2, 1, 3];

此数组索引>值对是:

  

0 = 0,1 = 2,2 = 1,3 = 3

排序数组后保持数组索引号的最简单,最优雅的方法是什么。在sort()后,index>值对应如下:

  

0 = 0,2 = 1,1 = 2,3 = 3

..但我应该能够显示那些已排序的值。问题是数组不能通过跳转索引位置0,2,1,3来列出,而只能列为0,1,2,3。

我可以以某种方式创建一个新数组,其数组值将是那些新的索引位置,然后对这个新数组进行排序,但保留记忆的前索引>值对。

虽然听起来很简单但我找不到解决方法。

由于

P.S。我实际上想要按照数组中包含的短语中的单词之间的空格数进行排序。然后我想显示按空格数排序(首先是大多数单词的短语)。

var input = ["zero", "here two spaces", "none", "here four spaces yes"];
var resort = [];
for (i = 0; i < input.length; i++) {
  var spaces = (input[i].split(" ").length - 1);
  resort.push(spaces); // new array with number of spaces list
}

2 个答案:

答案 0 :(得分:3)

您可以将Sorting with map与新数组一起使用,以保留原始索引和值。

// the array to be sorted
var list = [0, 2, 1, 3];

// temporary array holds objects with position and sort-value
var mapped = list.map(function(el, i) {
    return { index: i, value: el };
})

// sorting the mapped array containing the reduced values
mapped.sort(function(a, b) {
    return a.value - b.value;
});

// container for the resulting order
var result = mapped.map(function(el){
    return list[el.index];
});

console.log(result);
console.log(mapped);
.as-console-wrapper { max-height: 100% !important; top: 0; }´

答案 1 :(得分:0)

如果您想按重要的事情排序,请将回调传递给sort

input.sort(function(a,b) {
    // b - a for descending order
    return b.split(" ").length - a.split(" ").length;
});