按内容对数组进行排序

时间:2011-09-29 10:01:50

标签: javascript jquery arrays sorting alphabetical

我有一个看起来像这样的数组:

markerArray[i] = [i, title, cat];

此数组在for循环中添加内容动态

所以结果可能是这样的:

markerArray[0] = [0, A title, A];
markerArray[1] = [1, A title new, B];
markerArray[3] = [3, A title, E];
markerArray[4] = [4, A title, A];

所以我的问题是我怎么能或者是否可以对数组进行排序以使输出基于A,BC等或标题或者从数组内部取得的任何内容,请注意最后一个(类别)是现在按字母顺序排列:

    markerArray[0] = [0, A title, A];
    markerArray[1] = [4, A title, A];
    markerArray[2] = [1, A title new, B];
    markerArray[3] = [3, A title, E];

这甚至可能吗?

5 个答案:

答案 0 :(得分:2)

尝试 -

var markerArray = new Array();
markerArray[0] = [0, "A title", "A"];
markerArray[1] = [1, "A title new", "B"];
markerArray[3] = [3, "A title", "E"];
markerArray[4] = [4, "A title", "Z"];
markerArray[5] = [5, "A title", "A"];


markerArray.sort(function(a, b) {
   var comp1 = a[2];
   var comp2 = b[2];
   return (comp1 < comp2) ? -1 : (comp1 > comp2) ? 1 : 0;
})

alert(markerArray);

答案 1 :(得分:1)

您必须使用Array对象中提供的排序功能。 此函数/方法接受自定义用户函数以确定元素必须如何排序。

function customSorter( a, b )
{
    var comp1 = a[2];
    var comp2 = b[2];
    return (comp1 < comp2) ? -1 : (comp1 > comp2) ? 1 : 0;
}
var markerArray = new Array();
markerArray[0] = [0, "A title", "A"];
markerArray[1] = [1, "A title new", "B"];
markerArray[3] = [3, "A title", "E"];
markerArray[4] = [4, "A title", "Z"];
markerArray[5] = [5, "A title", "A"];

markerArray.sort( customSorter );

有用信息:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort

答案 2 :(得分:0)

使用自定义排序功能。阅读documentation如何操作。

答案 3 :(得分:0)

您可以将compare函数作为参数传递给Array.sort方法,并在比较函数中编写比较逻辑。见https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort

答案 4 :(得分:0)

你可以试试这种东西:

   markerArray.sort(function(a,b){ 
      for (i = 0; i <= 3 ; i++) {
         if (a[i] <> b[i]) {
            if (a[i] < b[i]) return -1;
            if (a[i] > b[i]) return 1;
         }
      }
      return 0;
   });

这将尝试使用第一个元素进行排序,如果它们相同,则尝试使用第二个元素进行排序,依此类推第三个元素。

[编辑]添加一些有趣的链接(参见其他答案):