【问题标题】:Need help sorting a nested array of mix string and integer in specific index需要帮助在特定索引中对混合字符串和整数的嵌套数组进行排序
【发布时间】:2020-03-03 21:58:25
【问题描述】:

我在那儿,

我有一个分数嵌套数组,我正在尝试对其进行排序,但是所有值都是字符串,并且排序如预期的那样混乱。

也全部保存在本地存储中。

我有下面的排序代码,它工作正常,但仅适用于第一个字符,所以对于索引 [3] 排序,例如我得到:

0000, 126, 15, 16, 20, 4, 4, 4, 5, 8 //如下面的数组所示。

但我应该得到:

0000、4、4、4、5、8、15、16、20、126

我读到我可以在排序之前添加零,然后在排序之后删除它们。但我想不出一种在如此复杂的数据数组中添加零的方法......

数组如下所示:

0: (5) ["Jack 9", "words", "6", "0000", "00:08:21"]
1: (5) ["Jack 6", "words", "59", "126", "00:08:22"]
2: (5) ["Jack 1", "words", "30", "15", "00:03:81"]
3: (5) ["Jack 4", "words", "24", "16", "00:02:94"]
4: (5) ["Jack 2", "words", "9",  "20", "00:14:90"]
5: (5) ["Jack 11","words", "9",   "4", "00:18:04"]
6: (5) ["Jack 10","words", "9",   "4", "00:19:06"]
7: (5) ["Jack 5", "words", "6",   "4", "00:08:97"]
8: (5) ["Jack 8", "words", "9",   "5", "00:16:83"]
9: (5) ["Jack 7", "words", "8",   "8", "00:19:98"]

function sortScoresErrors(array){
    array.sort((function(index){
        return function(a, b){
            return (a[index] === b[index] ? 0 : (a[index] < b[index] ? -1 : 1));
        };
        })(3));// (3) is the index - Descending
    };

【问题讨论】:

    标签: javascript sorting multidimensional-array


    【解决方案1】:

    您可以检查所需索引的值是否可以读取为数值并使用另一个函数与项目的增量进行比较。

    function sortScoresErrors(array) {
        array.sort((function (index) {
            return isFinite(array[0][index])
                ? (a, b) => a[index] - b[index]
                : (a, b) => (a[index] === b[index] ? 0 : (a[index] < b[index] ? -1 : 1));
        })(3));
    }
    
    var data = [["Jack 9", "words", "6", "0000", "00:08:21"], ["Jack 6", "words", "59", "126", "00:08:22"], ["Jack 1", "words", "30", "15", "00:03:81"], ["Jack 4", "words", "24", "16", "00:02:94"], ["Jack 2", "words", "9", "20", "00:14:90"], ["Jack 11", "words", "9", "4", "00:18:04"], ["Jack 10", "words", "9", "4", "00:19:06"], ["Jack 5", "words", "6", "4", "00:08:97"], ["Jack 8", "words", "9", "5", "00:16:83"], ["Jack 7", "words", "8", "8", "00:19:98"]];
    
    sortScoresErrors(data);
    
    console.log(data);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

    • 您好,非常感谢您非常有见地的回答,我仍在努力了解它的真正工作原理,但拥有另一种观点也很棒。非常感谢您的宝贵时间!
    【解决方案2】:

    只需将字符串转换为条件中的数字即可。

    替换return (a[index] === b[index] ? 0 : (a[index] &lt; b[index] ? -1 : 1));

    对此:return (Number(a[index]) === Number(b[index]) ? 0 : (Number(a[index]) &lt; Number(b[index]) ? -1 : 1));

    这在第三个索引中的字符串实际上是数字时有效

    【讨论】:

    • 非常感谢您的帮助!我自己学习 JS,完全不了解它的所有方面。你的回答是天才和简单的,我能够实现它,我现在明白它是如何工作的。万事如意!
    猜你喜欢
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多