簡體   English   中英

根據定義的順序對數組進行排序

[英]Sorting an array according to defined order

我試圖在數組中的所有項目進行排序items按照指定的順序string 我正在努力取得results

["first", "second", "third", "last"]

排序后。 起始數組具有隨機順序。

 var string = "first;second;third;last", items = ["third", "first", "last", "second"], result = [], lastpos = 0, lastinsert = 0; for (var i = 0; i < items.length; i++) { var mypos = string.indexOf(items[i]), insertat; if (mypos > lastpos) { insertat = lastinsert } else { insertat = lastinsert + 1 } result.splice(insertat, 0, items[i]); lastpos = mypos; } document.getElementById("output").innerHTML = JSON.stringify(result); 
 <pre id="output"></pre> 

不是要進行文本分析來對數組進行排序。 該數組應僅遵循變量string各項的順序。

我假設您正在詢問有關基於另一個的值/索引對數組進行排序的過程的更多信息。 否則,將沒有理由進行排序。

您可以嘗試將Array.prototype.sort()與以下內容一起使用:

var string = "first;second;third;last".split(';'),
    items = ["third", "first", "last", "second"],
    result = [];

result = items.sort(function(a,b) {
    return string.indexOf(a) - string.indexOf(b) 
});

document.getElementById("output").innerHTML = JSON.stringify(result);

這是一個JSFiddle示例。

- 編輯 -

根據評論,這應該對性能更友好:

var string = "first;second;third;last".split(';'),
    stringHash = {},
    items = ["third", "first", "last", "second"],
    result = [];    

for (var i = 0, j = string.length; i < j; i++) {
    stringHash[string[i]] = i;
}

result = items.sort(function(a,b) {
    return stringHash[a] - stringHash[b];
});

document.getElementById("output").innerHTML = JSON.stringify(result);

您將添加一個額外的步驟,因此,如果原始數組較小,則可能不值得。 但是,如果數組較大,則執行效果會更好。

我不確定我是否理解正確,但是如果您的目標只是簡單地按原始順序獲取這些元素的數組,則僅從原始字符串中重新分割將是最簡單的:

 var string = "a:test;a:second;b:third;a:last"; var result = string.split(';'); 

還是對未在代碼段中描述的數據執行某些轉換,實際上需要您取消對現有數組元素的排序?

暫無
暫無

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

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