尝试使用 TimSort 对对象数组进行排序时返回 'undefined'

Getting 'undefined' returned when trying to sort array of objects with TimSort

这是一个非常接近我在我的项目中尝试实现的代码片段:https://repl.it/@Twinbird24/TimSort-example

var timsort = require('timsort');

const arr = [
  {
    name: 'Amy',
    age: 23
  },
  {
    name: 'Bob',
    age: 34
  },
  {
    name: 'Cary',
    age: 18
  }
];

function sort(objectsArr, sortBy, sortOrder = 'ascending') {
  function stringCompare(a, b) {
    return a.sortBy - b.sortBy;
  }
  return timsort.sort(objectsArr, stringCompare);
}

const sortedArr = sort(arr, 'name');

console.log(sortedArr);

这是我正在使用的包:https://www.npmjs.com/package/timsort

我正在尝试按每个对象的名称 属性 对我的对象数组进行排序,该名称包含一个字符串——尽管我的函数也可以传递另一个项目进行排序(即 'age') .

TimSort 的文档不是很清楚,查看源代码我仍然不太清楚如何配置我的代码。

您会在我的代码中注意到,我还想选择按 'ascending' 或 'descending' 排序,但我不确定如何将其添加到 TimSort 方法中使用。

您的字符串比较不会比较字符串。它仅适用于数字类型或具有 valueOf 的类型,例如 Date.

也许如果你把它改成a < b ? -1 : a > b ? 1 : 0,效果会好一些。那么这个怎么样?:

function sort(objectsArr, sortBy, sortOrder = 'ascending') {
  function stringCompare(a, b) {
    const left = a[sortBy], right = b[sortBy];
    return left < right ? -1 : left > right ? 1 : 0;
  }
  return timsort.sort(objectsArr, stringCompare);
}

这仍然没有回答您 ascending/descending 的问题。从这里应该很简单,但是如果你不能得到它,请再问一个问题。