【问题标题】:Javascript Array Sort() Index before and afterJavascript Array Sort() 前后索引
【发布时间】:2012-07-16 05:18:21
【问题描述】:

我有一个对象的索引:

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

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

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

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

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

【问题讨论】:

  • 取决于您的排序算法。你使用的是javascript默认排序吗?
  • 是的。我只是想知道有比临时变量和循环更有效的方法来找到它。但我意识到在对象通过数组移动位置时保持 +- 计数器更糟。

标签: javascript arrays sorting indexing


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你可以这样做:

    • 创建数组。
    • 将其复制到另一个数组。
    • 对原来的排序。
    • 在未排序中搜索已排序的元素的出现次数。

    看看:

    // 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 了解有关数组函数的一些信息。

    【讨论】:

      猜你喜欢
      • 2014-12-09
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 2022-11-14
      • 2014-02-25
      相关资源
      最近更新 更多