[英]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
但有人可以帮我理解这行代码。 谢谢你的期待。
构造函数需要零个或一个参数,如果提供的话,它应该是一个对象。如果没有提供参数,则默认为空对象。 然后,它检查(可能为空)对象的属性comparator
和initialValues
。 如果对象上存在这些属性,则将它们提取到那些变量名称( comparator
和initialValues
)中 - 否则,为这些变量名称分配默认值, (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
的[]
如果comparator
或initialValues
以外的属性在传递的参数中,则忽略它们。
写得冗长,没有默认参数:
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.