Поскольку мы хотим запускать дорогостоящую ключевую функцию только один раз для каждого элемента массива, у нас нет другого выбора, кроме как использовать какой-то вид памятки.Самый простой способ связать значение ключа с каждым элементом - это, вероятно, создать массив из [key, element]
пар, которые мы затем можем отсортировать:
myArr = [{'foo': 5, 'bar': 'hello'}, {'foo': 3, 'bar': 'world'}];
keyFunc = obj => obj.foo;
// compute the key of each array element
keyedArr = myArr.map(obj => [keyFunc(obj), obj]);
// sort the array based on the key
keyedArr.sort((a, b) => a[0] - b[0])
// remove the key values from the array
result = keyedArr.map(pair => pair[1]);
// result: [{'foo': 3, 'bar': 'world'}, {'foo': 5, 'bar': 'hello'}]
Обратите внимание, что это работает, только если функция ключа возвращает число.