2012-07-16 120 views
0

我有一個索引的對象:JavaScript數組排序()索引

indexArray = [ 
    {obj 1}, 
    {obj 2}, 
    ... 
    {obj n} 
]; 

我申請一個排序算法,以在它和indexArray最終被混合起來:

indexArray = [ 
    {obj 77}, 
    {obj 36}, 
    ... 
    {obj 8} 
]; 

如果原始數組中有一個元素位於索引之前和之後,我想跟蹤。例如,在排序之前,obj 36在索引[35]處,並且新索引是索引[1]。我將如何確定新的指數。

我可以在排序前堅持一個temp變量中的元素/ obj36,然後排序之後,詢問indexArray obj36的當前索引嗎?如果是這樣,怎麼樣?

+0

取決於您的排序算法。你使用的JavaScript默認排序? – jeschafe 2012-07-16 05:22:09

+0

是的。我只是想知道有更有效的方法然後溫度變量和循環找到它。但我意識到保持一個+計數器,因爲對象在陣列中移動的位置更糟糕。 – 2012-07-16 05:30:12

回答

1

是的,使用一個臨時變量來引用它,然後在排序數組中尋找它可以使竅門。如果可用,您可以使用Array.prototype.indexOf方法,或者只是循環找到它。

0

你可以這樣做:

  • 創建陣列。
  • 將其複製到另一個陣列。
  • 排序原始的一個。
  • 搜索排序在未排序的itens的出現次數。

請看:

// original array of objects 
var a = [{ 
    n: 5 
}, { 
    n: 3 
}, { 
    n: 7 
}, { 
    n: 1 
}]; 

// create a copy of the original (concats the original with a empty one) 
var b = a.concat([]); 

// sorting 
a.sort(function(left, right) { 
    return left.n - right.n; 
}); 

// print a values 
for (var i in a) { 
    console.log(a[i].n); 
} 

// print b values 
for (var i in b) { 
    console.log(b[i].n); 
} 

// searching... 
for (var i in a) { 
    console.log("value: " + a[i].n + 
       " original index: " + b.indexOf(a[i]) + 
       " current index: " + i); 
} 

以約陣列功能的一些信息看here