如何在数组中存储排序值的索引键



我正在尝试按制表符分隔数据的最后一个值对数组进行排序。我的数据像这个

AEDAG       6   5   6 
AEDSG       8   5   3
AEEAP       10  5   12
AEEKP       77  5   2
AELKVT      5   6   12

我尝试按最后一列(6,3,12,2,12)对数据进行排序。预期输出为

AELKVT      5   6   12
AEEAP       10  5   12
AEDAG       6   5   6 
AEDSG       8   5   3
AEEKP       77  5   2

我试着按照脚本

var array = ["AEDAG     6   5   6","AEDSG       8   5   3","AEEAP       10  5   12","AEEKP      77  5   2","AELKVT      5   6   12"];
var index = [];
var data = [];
for(var i = 0; i < array.length; i++)
{
    var ech_line = array[i].split(/t+/);
    index.push(i);
    data.push(ech_line[3]);
}
var sorted_index = [];
data.sort(function(a,b)
{ 
    var xac = b-a; 
    sorted_index.push(data.indexOf(xac)); //Here i push the value of sorted data.
    return xac;
});

var modified_data = [];
for(var i = 0; i < sorted_index.length; i++)
{
    modified_data.push(sorted_index[i]);
}

我犯了什么错。在我的剧本里。我该怎么做?

对于制表符分隔的值,我建议稍微改变一下操作方式:

    var array = ["AEDAG 6   5   6","AEDSG   8   5   3","AEEAP   10  5   12","AEEKP  77  5   2","AELKVT  5   6   12"];
    var data = [];
    for(var i = 0; i < array.length; i++)
    {
         var ech_line = array[i].split(/t+/);
         data.push(ech_line); //Each data row is the tab separated values splited array
    }
    var data_sorted = data.sort(function(a,b)
    { 
        if(b[3]/1 > a[3]/1) //Define a custom comparision for sorting data
            return 1;
        else 
            return -1;
        return 0;
    });
var data_formated = data_sorted.map(function(item){
    return item[0]+"tt"+item[1]+"t"+item[2]+"t"+item[3];
});
    alert(data_formated); //Print the desired result.

我做了一个jsFiddle来看看它能起作用。也许你需要一些格式,但你已经掌握了所需的所有信息。

这是您的代码:如果您需要进一步澄清它的工作原理,请告诉我

var array = ["AEDAGt6t5t6", "AEDSGt8t5t3", "AEEAPt10t5t12", "AEEKPt77t5t2", "AELKVTt5t6t12"];
array.sort(function(a, b) {
  return b.split(/t+/)[3] - a.split(/t+/)[3]
});
alert(JSON.stringify(array))

最新更新