Я пытаюсь получить отсортированные индексы массива объектов на основе значения свойства. У меня есть следующий упрощенный пример:
let myObj = {myArray:[{amt:0.02380952380952380},{amt:1.0238095238095237},{amt:0.02380952380952380},{amt:-0.02380952380952380}]}
let indices = new Array;
for (let i = 0; i < myObj.myArray.length; i++) {
indices[i] = i
}
let items = myObj.myArray.slice();
indices.sort((a, b) => (items[a].amt > items[b].amt)
? 1
: ((items[b].amt > items[a].amt) ? -1 : 0));
console.log(indices) //gives [ 3, 0, 2, 1 ] expected [ 2, 3, 1, 0 ] or [ 1, 3, 2, 0 ]
Полученный массив indices
не дает ожидаемого порядка.
Есть ли здесь что-то простое / очевидное, которого я упускаю?
Примечание. Я не уверен между [2, 3, 1, 0] или [1, 3, 2, 0], поскольку разные браузеры могут интерпретировать одинаковые значения по-разному: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
Если compareFunction (a, b) возвращает 0, оставьте a и b неизменными по отношению друг к другу, но отсортированные по всем различным элементам. Примечание: стандарт ECMAscript не гарантирует такого поведения, поэтому не все браузеры (например, версии Mozilla, датируемые как минимум 2003 годом) соблюдают это.