如何从排序函数中返回未排序的项目?

时间:2017-04-20 03:38:17

标签: javascript sorting

我正在以这种方式过滤和排序项目:

items
  .filter(// filter logic)
  .sort((a, b) => {
    if (shouldntSort) return
    // sorting logic
  },

我认为return会停止sort功能,但我错了。只删除整个.sort方法会停止对项目进行符号排序。

如何在.sort?

中返回未排序的项目表单

1 个答案:

答案 0 :(得分:3)

如果您致电sort,您就会进行排序。没有合理的方法不去。

因此,如果您不想排序,请不要致电sort

items = items.filter(/*...*/);
if (!shouldntSort) {
    items.sort();
}
  

我认为return会停止sort功能

return只退出排序回调。 sort反复调用回调来询问两个项目应该如何相互关联(第一项应该在第二项之前还是之后)。没有"取消排序"从该回调返回值。

如果你需要一个可以作为同一个表达式的一部分的版本,你可以给自己一个maybeSort函数:

Object.defineProperty(Array.prototype, "maybeSort", {
    value: function(shouldSort, sortCallback) {
        if (shouldSort) {
            return sortCallback ? this.sort(sortCallback) : this.sort();
        }
        return this;
    }
});

然后

items = items
    .filter(/*...*/)
    .maybeSort(!shouldntSort);