javascript - 如何在javascript中对数组进行排序,但将结果保存在单独的数组中

标签 javascript

我想根据任何这些对象属性对对象数组进行排序。但我希望原始数组保持不变。相反,我想将索引的排序顺序保存在单独的数组中。

var source = [
  {"a": 2, "b": 8, "c": 9},
  {"a": 4, "b": 3, "c": 7},  
  {"a": 1, "b": 0, "c": 6}
]

var sortedIndexes;

SomeSortOfSortMethod("a", "asc");

// result of sortedIndexes containing indexes to source array:
// [2, 0, 1] 

有什么想法可以做到这一点吗?我无法使用内置的 javascript 排序方法,因为它会更改源。我只需要捕获排序并将该顺序保存为源数组的索引。

最佳答案

var source = [
      {"a": 2, "b": 8, "c": 9},
      {"a": 4, "b": 3, "c": 7},  
      {"a": 1, "b": 0, "c": 6}
    ];

var orderedCopyArray = _.sortBy(source, "a");

// Defualt ascending
console.log(JSON.stringify(orderedCopyArray));

// Descending
console.log(JSON.stringify(orderedCopyArray.reverse()));

var indexesArray = [], leng = source.length;

// Descending array ordered
var reverse = orderedCopyArray.reverse();

// Get index
for(var i=0; i < leng; i++){
  var obj1 = reverse[i]; 
  for(var j=0; j < leng; j++){
    var obj2 = source[j];
    if(_.isEqual(obj1, obj2)){
      indexesArray.push(j);
      break;
    }
  }
}

console.log(indexesArray); //[2, 0, 1]

关于javascript - 如何在javascript中对数组进行排序,但将结果保存在单独的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35236870/

相关文章:

javascript - 无法在谷歌地图 API 中的标记之间绘制路线

javascript - 声明一个异步函数

javascript - Javascript 中的 String 是原始类型还是对象?

javascript - 如何截取youtube屏幕截图

javascript - Angular 1/ui-router - 将函数执行到数据对象中

javascript - typescript : add prototype method for a object which implements and interface or extend DTO

javascript - 选择一个 div (jQuery)

javascript - 根据选择的单选/选择选项禁用/启用文本框 Javascript

javascript - jQuery如何实现动画?

javascript - 按两个值对数组进行排序