[英]Sorting an array according to another array
我有兩個數組,主要包含300個值:
var main = [ 182, 928, 192, 111, 493, 1100, 3 ] ..
第二個包含10個值,但是每個值都是一個數組:
var secondary = [{"id" : 3, "category" : "animals"}, {"id" : 111, "category" : "water"}] ..
我的問題是如何根據main array
的值按其ID對secondary array
進行排序?
如果您如上所述構造第二個數組,則可以使用以下代碼。 該解決方案使用indexOf,可能並非在所有瀏覽器中都存在。 Mozilla 在此處提供indexOf的實現。
var main = [ 182, 928, 192, 111, 493, 1100, 3 ];
var secondary = [{"id" : 3, "category" : "animals"}, {"id" : 111, "category" : "water"}];
secondary.sort(function(a, b) {
return main.indexOf(a["id"]) - main.indexOf(b["id"]);
});
首先, main
數組創建某種倒排索引:
var main_map = {};
for(var i = main.length;i--; ) {
main_map[main[i]] = i;
}
然后,您可以通過自定義排序功能sort
[docs]進行如下sort
:
secondary.sort(function(a, b) {
return main_map[a["id"]] - main_map[b["id"]];
});
另外,您可以為secondary
陣列創建一個倒排索引並循環遍歷main
陣列,但是由於secondary
陣列要小得多,因此效率會降低。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.