簡體   English   中英

Javascript排序功能,可將元素放置在數組中間

[英]Javascript sort function to place element in the middle of an array

幾個月前,我試圖找到一種使用javascript sort函數將元素放置在3個項目的數組中間的方法。 似乎沒有達到目標的聰明方法。

但是,我最近找到了解決此問題的可行方法。 然后,我嘗試將這種解決方案推廣到更大范圍的(5、7、9 ...)項目。 但是,當數組的大小超過10個項目時,它似乎會中斷。

由於我是通過反復試驗而不是單純的思考來找到解決方案的,所以我希望有人能夠向我解釋為什么在此看似任意的數字之前一切似乎都可以正常工作。

這是我創建的Codepen演示,以說明問題: https ://codepen.io/TMLN/pen/PBoKgR?editors=0011

您可以編輯該行ReactDOM.render(<Example items={example1} />...並更換道具example1example2example3 ,......你會發現一切開始從打破example5 ,但我真的不能弄清楚為什么...

PS:這在Chrome上有效,但對於那些使用Edge的用戶,由於瀏覽器處理排序功能的方式,您可能會遇到錯誤。

當兩個比較值都不等於要移動的值時,排序回調函數將返回0。 您可能打算用這個零表示ab (兩個比較值)的相對位置不應改變,但是實際上零表示排序實現應將兩個值視為相等 ,因此實際上可以自由交換他們的位置。 只有在實現穩定 (所謂的實現)時,您才能確保兩個值的相對位置不會改變。

也有人發現,在Chrome瀏覽器中sort功能並不穩定,這說明你注意到的反常行為。 有關在不同瀏覽器中實現穩定的情況,請參見此問答

為了使其在所有JavaScript引擎上都能正常工作,您應該更改代碼,並根據比較對中的所有對當前所占的索引返回非零值。

最后說明:為該任務使用sort是一個不好的選擇:好的排序算法具有O(nlogn)時間復雜度,但是如果您需要在sort回調中查找值的索引,則實際上要在其中添加因子n ,使其成為O (n²logn) 要從數組中取出一個元素並將其注入到其他位置,是可以在O(n)時間內完成的操作。 您可以使用Array#splice (兩次)來做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM