[英]Sorting by every nth element in javascript
我有一組<tr>
元素,我想分批排序,即每個第n個元素用於排序算法中的比較,隨后的n-1個元素與第n個元素一起移動。 ( 更新 :我應該澄清我無法控制HTML)
在下面的例子中,行按照第1,第4和第7個元素的值按字母順序排序,即Apple,Banana和Coconut。 隨后的2個<tr>
元素隨之移動,即3個批次。
排序前:
<tr> Banana </tr>
<tr> - Shake </tr>
<tr> - Chips </tr>
<tr> Apple </tr>
<tr> - Juice </tr>
<tr> - Sauce </tr>
<tr> Coconut </tr>
<tr> - Curry </tr>
<tr> - Water </tr>
排序后:
<tr> Apple </tr>
<tr> - Juice </tr>
<tr> - Sauce </tr>
<tr> Banana </tr>
<tr> - Shake </tr>
<tr> - Chips </tr>
<tr> Coconut </tr>
<tr> - Curry </tr>
<tr> - Water </tr>
有一些直接的方法,例如將其拆分為3個列表並正常排序第一個。 然后根據第一個列表排序第二個和第三個。 我的問題是,是否可以在array.sort([compareFunction])
的compare函數中array.sort([compareFunction])
?
更新 :另一種方法是將其轉換為這樣的數組
[['Banana','- Shake', '- Chips'],['Apple', '- Juice','- Sauce'],['Coconut','- Curry', '- Water']]
並按此sort(function(a, b) {return a[0] - b[0]})
我使用了一個基本數組來顯示方法,但這對我有用:
var groupSize = 3;
var arr = ['banana',' - shake',' - chips','apple',' - juice',' - sauce','coconut',' - curry',' - water'];
var newArr = [];
while((sec = arr.splice(0,groupSize)).length > 0)
{
newArr.push(sec);
}
newArr.sort()
arr = [];
for(var i in newArr)
{
for(var j in newArr[i])
{
arr.push(newArr[i][j]);
}
}
console.log(arr); //["apple", " - juice", " - sauce", "banana", " - shake", " - chips", "coconut", " - curry", " - water"]
是否可以在
array.sort(compareFunction)
的compare函數中array.sort(compareFunction)
?
是的,通過使array
項層次結構感知。 所以你必須引入一個從Shake
到Banana
,從Chips
到Banana
,從Juice
到Apple
等的指針。 然后比較函數看起來像
function compare(a, b) {
var aTop = a.parent || a,
bTop = b.parent || b;
if (aTop.value > bTop.value) return 1;
if (aTop.value < aTop.value) return -1;
if (b.parent == a) return 1;
if (a.parent == b) return -1;
if (a.value > b.value) return 1;
if (a.value < b.value) return -1;
return 0;
}
可能會以編程方式(使用數組),但相信我 - 你真的不想要這個。
類似的方法是簡單地將數組連接到字符串( ["Banana"]
→ "Banana"
, ["Banana", "Shake"]
→ "Banana-Shake"
),這樣您就不需要自定義比較再次運行,然后在排序后拆分它們以獲取原始值。
但是,您的分組方法優於這些方法,因為它需要更少的比較。
我認為你需要額外的通過表,這可以在創建表時完成。 您需要根據標題行和子項創建“鍵”。
所以在你通過這個傳遞之后,我正在顯示屬性,但你可以使用js屬性:
<tr data-key="Banana"> Banana </tr>
<tr data-key="Banana - Shake"> - Shake </tr>
<tr data-key="Banana - Chips"> - Chips </tr>
<tr data-key="Apple"> Apple </tr>
<tr data-key="Apple - Juice"> - Juice </tr>
<tr data-key="Apple - Sauce"> - Sauce </tr>
<tr data-key="Coconut"> Coconut </tr>
<tr data-key="Coconut - Curry"> - Curry </tr>
<tr data-key="Coconut - Water"> - Water </tr>
然后按那個鍵排序
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.