优先队列中的比较器: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
但是有人可以帮我理解那行代码吗?感谢期待。
构造函数需要零个或一个参数,如果提供,则应该是一个对象。如果未提供参数,则默认为空对象。然后,它检查(可能为空)对象的属性 comparator
和 initialValues
。如果这些属性存在于对象上,它们将被提取到那些变量名中(comparator
和 initialValues
)——否则,这些变量名将被分配默认值,(a, b) => a - b
for comparator
和 []
对于 initialValues
.
例如
new PriorityQueue()
导致 PriorityQueue
,.comparator
为 (a, b) => a - b
,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();
}
我是 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
for comparator
和 []
对于 initialValues
.
例如
new PriorityQueue()
导致 PriorityQueue
,.comparator
为 (a, b) => a - b
,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();
}