优先队列中的比较器:Javascript

Comparator in a Priority Queue: Javascript

我是 Javascript 的新手,所以这个问题, 我了解箭头功能。然而,这种语法完全让我感到困惑。 这是一个 PriorityQueue 的实现,它将函数比较器作为回调,这是语法,

class PriorityQueue {
  constructor({ comparator = (a, b) => a - b, initialValues = [] } = {}) {
    this.comparator = comparator;
    this.data = initialValues;
    this.heapify();
  }

我不明白这行是什么意思,

{ comparator = (a, b) => a - b, initialValues = [] } = {}

完整的代码在这里,如果你需要的话, https://github.com/jeantimex/javascript-problems-and-solutions/blob/master/src/common/priority-queue.js

但是有人可以帮我理解那行代码吗?感谢期待。

构造函数需要零个或一个参数,如果提供,则应该是一个对象。如果未提供参数,则默认为空对象。然后,它检查(可能为空)对象的属性 comparatorinitialValues。如果这些属性存在于对象上,它们将被提取到那些变量名中(comparatorinitialValues)——否则,这些变量名将被分配默认值,(a, b) => a - b for comparator[] 对于 initialValues.

例如

new PriorityQueue()

导致 PriorityQueue.comparator(a, b) => a - binitialValues[],而

new PriorityQueue({ comparator: (a, b) => a.localeCompare(b) })

结果为 PriorityQueue.comparator(a, b) => a.localeCompare(b)initialValues[]

如果传递的参数中有 comparatorinitialValues 以外的属性,它们将被忽略。

写得很啰嗦,没有默认参数:

class PriorityQueue {
  constructor(obj) {
    if (obj === undefined) {
      obj = {};
    }
    if (obj.comparator === undefined) {
      obj.comparator = (a, b) => a - b;
    }
    if (!obj.initialValues === undefined) {
      obj.initialValues = [];
    }

    // main constructor body starts here
    this.comparator = obj.comparator;
    this.data = obj.initialValues;
    this.heapify();
  }