繁体   English   中英

优先级队列中的比较器: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用于comparator[]用于initialValues

例如

new PriorityQueue()

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

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();
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM