我有一个红宝石背景,本周开始自学javascript。我一直在做练习问题来完成这个。
如果我要在ruby中解决这个问题,它看起来就是这样(顺便说一下,当我编写这个时,从红宝石中关闭javascript和代码要困难得多......)
class Array
def quicksort(&prc)
return self if self.size <= 1
prc ||= Proc.new { |x, y| x <=> y }
pivot = self[0]
left = self[1..-1].select { |x| prc.call(x, pivot) == -1 || prc.call(x, pivot) == 0 }
right = self[1..-1].select { |x| prc.call(x, pivot) == 1 }
left.quicksort(&prc) + [pivot] + right.quicksort(&prc)
end
end
现在我对JavaScript没有太多问题......所有相同的概念都适用。除了语法不同之外,问题以相同的方式解决。我无法弄清楚如何在JS中编写比较器,因此我查看了解决方案以获得一些见解,如下所示。
Array.prototype.quickSort = function (comparator) {
if (this.length <= 1) return this;
if (typeof comparator !== "function") {
comparator = (x, y) => {
if (x === y) {
return 0;
} else if (x < y) {
return -1;
} else {
return 1;
}
};
}
const pivot = this[0];
const left = [];
const right = [];
for (let i = 1; i < this.length; i++) {
if (comparator(this[i], pivot) === -1) {
left.push(this[i]);
} else {
right.push(this[i]);
}
}
return left.quickSort(comparator).
concat([pivot]).
concat(right.quickSort(comparator));
};
我知道比较器正在ruby&lt; =&gt;中构建宇宙飞船运营商。
我不明白if语句是做什么的,具体是什么!==“function”是。
if (typeof comparator !== "function")
非常感谢任何见解。 JS非常棒,成为我最喜欢的语言!