[removed] Sort array and return an array of indicies that indicates the position of the sorted elements with respect to the original elements

后端 未结 8 833
囚心锁ツ
囚心锁ツ 2020-12-05 01:51

Suppose I have a Javascript array, like so:

var test = [\'b\', \'c\', \'d\', \'a\'];

I want to sort the array. Obviously, I can just do th

8条回答
  •  情书的邮戳
    2020-12-05 02:20

    var test = ['b', 'c', 'd', 'a'];
    var test_with_index = [];
    for (var i in test) {
        test_with_index.push([test[i], i]);
    }
    test_with_index.sort(function(left, right) {
      return left[0] < right[0] ? -1 : 1;
    });
    var indexes = [];
    test = [];
    for (var j in test_with_index) {
        test.push(test_with_index[j][0]);
        indexes.push(test_with_index[j][1]);
    }
    

    Edit

    You guys are right about for .. in. That will break if anybody munges the array prototype, which I observe annoyingly often. Here it is with that fixed, and wrapped up in a more usable function.

    function sortWithIndeces(toSort) {
      for (var i = 0; i < toSort.length; i++) {
        toSort[i] = [toSort[i], i];
      }
      toSort.sort(function(left, right) {
        return left[0] < right[0] ? -1 : 1;
      });
      toSort.sortIndices = [];
      for (var j = 0; j < toSort.length; j++) {
        toSort.sortIndices.push(toSort[j][1]);
        toSort[j] = toSort[j][0];
      }
      return toSort;
    }
    
    var test = ['b', 'c', 'd', 'a'];
    sortWithIndeces(test);
    alert(test.sortIndices.join(","));
    

提交回复
热议问题