基于内部数组javascript中的值对外部数组进行排序

时间:2010-05-08 11:19:24

标签: javascript algorithm sorting

我有一个包含数组的数组,我想根据内部特定列中的值对外部数组进行排序。

我打赌这听起来有点令人困惑,所以我会直接跳到一个例子。

初始数据:

var data = [
  [
    "row_1-col1",
    "2-row_1-col2",
    "c-row_1-coln"
  ],
  [
    "row_2-col1",
    "1-row_2-col2",
    "b-row_2-coln"
  ],
  [
    "row_m-col1",
    "3-row_m-col2",
    "a-row_m-coln"
  ]
];

根据索引为1

的列对数据进行排序
data.sortFuncOfSomeKind(1);

然后对象看起来像这样;

var data = [
  [
    "row_2-col1",
    "1-row_2-col2",
    "b-row_2-coln"
  ],
  [
    "row_1-col1",
    "2-row_1-col2",
    "c-row_1-coln"
  ],
  [
    "row_m-col1",
    "3-row_m-col2",
    "a-row_m-coln"
  ]
];

根据索引为2的列

对数据进行排序
data.sortFuncOfSomeKind(2);

然后对象看起来像这样;

var data = [
  [
    "row_m-col1",
    "3-row_m-col2",
    "a-row_m-coln"
  ],
  [
    "row_2-col1",
    "1-row_2-col2",
    "b-row_2-coln"
  ],
  [
    "row_1-col1",
    "2-row_1-col2",
    "c-row_1-coln"
  ]
];

大Q

您知道的是否存在现有的解决方案,或者我是否必须自己编写?如果是这样,哪个是最容易使用的排序算法?快速排序

_L

3 个答案:

答案 0 :(得分:9)

Array#sort(请参阅the spec的第15.4.4.11节,或MDC)接受一个可选的函数参数,该参数将用于比较两个条目以进行排序。如果第一个参数是“小于”第二个参数,则函数应该返回-1,如果它们相等则返回0,如果第一个参数是“大于”第二个参数,则返回1。所以:

outerArray.sort(function(a, b) {
    var valueA, valueB;

    valueA = a[1]; // Where 1 is your index, from your example
    valueB = b[1];
    if (valueA < valueB) {
        return -1;
    }
    else if (valueA > valueB) {
        return 1;
    }
    return 0;
});

(显然你可以稍微压缩一下代码;为了清楚起见,我一直保持冗长。)

答案 1 :(得分:4)

这是一个不需要单独的变量来包含索引

的解决方案
var arr = [.....]
arr.sort((function(index){
    return function(a, b){
        return (a[index] === b[index] ? 0 : (a[index] < b[index] ? -1 : 1));
    };
})(2)); // 2 is the index

对索引2进行排序

答案 2 :(得分:1)

以前这是一个返回简单x<y比较结果的排序实现。这个解决方案是不鼓励的,这个帖子只是为了保留随后的讨论。