优先队列中的比较器:JavaScript

时间:2019-01-16 03:38:36

标签: javascript ecmascript-6 heap priority-queue

我是Java语言的新手,因此这个问题, 我了解箭头功能。但是,这种语法使我完全困惑。 这是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

但是有人可以帮助我理解该行代码。谢谢您。

1 个答案:

答案 0 :(得分:3)

构造函数期望零或一个参数,如果提供,则应为一个对象。如果未提供参数,则默认为空对象。然后,它检查(可能为空)对象的属性comparatorinitialValues。如果对象上存在这些属性,则将它们提取到那些变量名(comparatorinitialValues)中;否则,为这些变量名分配默认值,{{1}为(a, b) => a - b }和comparator代表[]

例如

initialValues

得到new PriorityQueue() ,其中{{1}的PriorityQueue.comparator的{​​{1}},而

(a, b) => a - b

得到initialValues,其中[]的{​​{1}}和new PriorityQueue({ comparator: (a, b) => a.localeCompare(b) }) 的{​​{1}}。

如果传递的参数中包含PriorityQueue.comparator以外的属性,则会将其忽略。

详细地写,没有默认参数:

(a, b) => a.localeCompare(b)