【问题标题】:sort multidimensional array on first number对第一个数字排序多维数组
【发布时间】:2014-09-23 16:33:24
【问题描述】:

这是我的数组,例如:

25 test1, 50 test 50, 10 item ten,100 test100 hi,75 seventy five ok, alpha menu item, bravo ok

我尝试了我在这里找到的这个功能:

function arraySort(pArray) {
    pArray.sort(
        function(a,b) {
            var len=a.length;
            for (var i=0;i<len;i++) {
                if (a[i]>b[i]) return 1;
                else if (a[i]<b[i]) return -1;
            }          
            return 0;
        }
    );
}

但以某种方式无法正确排序。只是希望对第一项上的多维数组进行排序,只是一个数字。我猜这可能是一个角色,如果这样放在最后。

感谢您在这里提供的大力帮助。

迈克

【问题讨论】:

  • 所以需要根据字符串开头的数字对数组进行排序我相信如果它是一个数字。
  • myArray = [25 test1, 50 test 50, 10 item ten,100 test100 hi,75 75 ok, alpha menu item, bravo ok];
  • 如何制作一个第一列是数字的二维数组,然后按数字排序,然后放在一起输出,输出是数字和字符串,然后是 \n 用于回车:)

标签: javascript arrays sorting multidimensional-array


【解决方案1】:
var yourArray = ['25 test1', '50 test 50', '10 item ten', '100 test100 hi', '75 seventy five ok', 'alpha menu item', 'bravo ok'];

function arraySort(pArray) {
    return pArray.sort(function(a, b) {
        var an = parseInt(a), bn = parseInt(b);
        return an > bn  || isNaN(bn) ? -1 : bn > an || isNaN(an) ? 1 : 0;
    });
}

// now call arraySort
var sortedArray = arraySort( yourArray );

【讨论】:

  • 排序,但 100 到 10 以降序排列,我首先希望最小的数字!嗯
【解决方案2】:

这应该可以:http://jsfiddle.net/xqhtf2z4/

function arraySort(pArray) {
    pArray.sort(
        function(a,b) {
            if ((isNaN(a[0]) && isNaN(b[0])) || (!isNaN(a[0]) && !isNaN(b[0]))) {
                if (a[0] > b[0]) {
                    return 1;
                }
                else if (a[0] < b[0]) {
                    return -1;
                }
                else {
                    return 0;
                }
            }
            else {
                if (isNaN(a[0])) {
                    return 1;
                }
                else { // isNaN(b[0]) == true
                    return -1;
                }
            }       
        }
    );
}

【讨论】:

  • 所以需要根据字符串开头的数字对数组进行排序,我相信如果它是一个数字,如果它是一个 alpha,只需添加到数组的末尾。谢谢。
  • 好的,排序后数组是未定义的。我们需要在代码中返回 pArray 吗?我正在学习这一切。
  • 我添加并现在返回数组,尽管由于某种原因它没有正确排序。
  • 在我链接的jsfiddle中,它显示第一个元素的第一个元素值,然后是最后一个元素的第一个元素值。没有什么是未定义的;检查我是如何写小提琴的。
  • 这里是输出:调试:2566 排序前:10 测试,11 测试我,25 显示我,100 百这里,蓝人,33 测试 30 调试:2569 排序后:11 测试我,25给我看,10 测试,100 百在这里,33 测试 30,蓝人
【解决方案3】:
var arr = ["bravo ok", "alpha menu item", "25 test1", "50 test 50", "10 item ten","100 test100 hi","75 seventy five ok"];
arr.sort(function(a,b){return a.localeCompare(b);})

输出是:

["10 item ten", "100 test100 hi", "25 test1", "50 test 50", "75 seventy five ok", "alpha menu item", "bravo ok"]

对我来说工作得很好。

【讨论】:

  • 所以需要根据字符串开头的数字对数组进行排序,我相信如果它是一个数字,如果它是一个 alpha,只需添加到数组的末尾。谢谢。
  • 嗨 Vikas 看来它不起作用我可以再试一次。感谢帮助。该数组是字符串,其中字符串中的第一项是数字。明白,不知道为什么这么难做。 :) 嗯谢谢
  • 这里是输出: Debug: 2566 before sort: 10 test, 11 test me, 25 show me,100,000 here,Blue man,33 test of this Debug: 2569 after sort: 11 test me, 25 给我看,10 测试,10000 在这里,33 测试这个,蓝人
猜你喜欢
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 2019-06-30
  • 2012-04-03
  • 2013-09-23
  • 2015-08-23
  • 2013-12-14
  • 1970-01-01
相关资源
最近更新 更多