2017-04-20 65 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);