2017-04-20 73 views
0

我过滤和以这种方式分拣物品:如何从排序函数中返回未排序的项目?

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

我以为return将停止sort功能,但我错了。只有删除整个.sort方法才能停止beign排序的项目。

如何退还未排序的项目中.sort?

+2

*“我怎么回未排序的项目形成.sort?“*这是什么意思?如果你不想让它们排序,不要对它们进行排序。 –

回答

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);