0

我有一个对象索引:

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

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

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

如果原始数组中有一个元素,我想跟踪它的索引前后。例如,obj 36 在排序前位于 index[35],新索引为 index[1]。我将如何确定新索引。

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

4

2 回答 2

1

是的,使用一个临时变量来引用它,然后在排序的数组中查找它就可以了。如果该方法可用,您可以使用该Array.prototype.indexOf方法,或者只是循环查找它。

于 2012-07-16T05:25:49.903 回答
0

你可以这样做:

  • 创建数组。
  • 将其复制到另一个数组。
  • 对原始的进行排序。
  • 在 unsorted 中搜索 sorted 的 item 的出现。

看一看:

// 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 );
}

在这里查看有关数组函数的一些信息。

于 2012-07-16T05:29:18.170 回答