【问题标题】:Sort array by its content按内容对数组进行排序
【发布时间】:2011-09-29 10:01:49
【问题描述】:

我有一个如下所示的数组:

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、B C 等或标题或从数组内部获取的任何内容,请注意最后一个(类别)是现在按字母顺序:

    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];

这甚至可能吗?

【问题讨论】:

标签: javascript jquery arrays sorting alphabetical


【解决方案1】:

试试-

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

【讨论】:

    【解决方案2】:

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

    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

    【讨论】:

      【解决方案3】:

      使用自定义排序功能。阅读documentation 怎么做。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          你可以试试这种东西:

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

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

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

          【讨论】:

            猜你喜欢
            • 2011-03-13
            • 1970-01-01
            • 1970-01-01
            • 2015-06-24
            • 2012-02-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-08-14
            相关资源
            最近更新 更多