簡體   English   中英

根據另一個數組對數組排序

[英]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.

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