Javascript Array Sort()索引之前和之后

时间:2012-07-16 05:18:21

标签: javascript arrays sorting indexing

我有一个对象的索引:

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

我对它应用了排序算法,而indexArray最终被混淆了:

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

如果原始数组中有一个元素,其索引前后我想跟踪。例如,obj 36在排序之前处于索引[35],而新索引是索引[1]。我如何确定新索引。

我可以在排序之前保持temp变量中的元素/ obj36,然后在排序之后,询问indexArray obj36的当前索引吗?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:1)

是的,使用temp变量来引用它然后在排序数组中查找它可以成功。您可以使用Array.prototype.indexOf方法(如果可用)或只是循环查找它。

答案 1 :(得分: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