优先级队列中的比较器:Javascript
我不熟悉Javascript,因此这个问题, 我理解箭头的功能。然而,这种语法完全把我弄糊涂了。 这是PriorityQueue的一个实现,它将函数比较器作为回调函数,这是语法优先级队列中的比较器:Javascript,javascript,ecmascript-6,heap,priority-queue,Javascript,Ecmascript 6,Heap,Priority Queue,我不熟悉Javascript,因此这个问题, 我理解箭头的功能。然而,这种语法完全把我弄糊涂了。 这是PriorityQueue的一个实现,它将函数比较器作为回调函数,这是语法 class PriorityQueue { constructor({ comparator = (a, b) => a - b, initialValues = [] } = {}) { this.comparator = comparator; this.data = initialValu
class PriorityQueue {
constructor({ comparator = (a, b) => a - b, initialValues = [] } = {}) {
this.comparator = comparator;
this.data = initialValues;
this.heapify();
}
我不明白这句话的意思
{ comparator = (a, b) => a - b, initialValues = [] } = {}
完整的代码在这里,如果您需要,
但是有人能帮我理解这行代码吗。感谢您的期待。构造函数需要零个或一个参数,如果提供,则应为对象。。如果未提供参数,则默认为空对象。然后,它检查(可能为空)对象的属性
比较器
和初始值
。如果对象上存在这些属性,则将它们提取到这些变量名(comparator
和initialValues
)中。否则,将为这些变量名分配默认值,(a,b)=>a-b
用于comparator
和initialValues
用于initialValues
乙二醇
使用(a,b)=>a-b的比较器和[]
的初始值生成优先队列
,而
new PriorityQueue({ comparator: (a, b) => a.localeCompare(b) })
使用的比较器(a,b)=>a.localeCompare(b)
和[]
的初始值生成优先队列
如果传递的参数中不包含比较器
或初始值
以外的属性,则忽略它们
详细编写,无默认参数:
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();
}
该语法表示“如果未提供比较器
,请使用此默认函数(a,b)=>a-b
,如果未提供初始值
,请使用空数组”@DacreDenny您可以通过一些示例将其作为更仔细的回答吗。我是JS新手。对此我很抱歉,看起来某些性能已经得到了这个答案。仅供参考,(a,b)=>-(ab)
可以替代(a,b)=>a-b
和(a,b)=>a.localeCompare(b)
,除非字符串比较实际上需要Intl支持。后面的={}是什么
mean,对不起,我知道这可能是个幼稚的问题。@Melisastewart这是答案的第二句话-如果没有提供参数,它默认为空对象。@CertainPerformance写这个有很长的路要走,如果是的话,你能用它更新你的答案吗,我真的在努力学习这门语言,事实证明这并不容易。这叫做“解构赋值”,这个特殊的例子是关于对象解构的@梅利萨斯特瓦特,看一看
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();
}