2012-07-16 147 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