首页 > 解决方案 > 如何根据第一个值对数组进行排序?

问题描述

我有一个包含字符串和数组的数组。每个字符串都与它旁边的数组相关联。例如,字符串 789 与数组 ['111A','222B','333C'] 相关联。我想对字符串进行排序,同时保持数组与之绑定。

我尝试使用sort()当我的数组中只有字符串时排序的方法,但是当我添加数组时它会返回到默认排序。

let myArry = [
  '789', 
  ['111A','222B','333C'], 
  '456',
  ['444E','555F','666G'], 
  '123',
  ['777H','888I','999J']
]

myArray.sort(function(a,b){
return a - b
})

归根结底,我希望数据看起来像这样。

['123', ['777H', '888I','999J'],
'456', ['444E', '555F', '666G'],
'789', ['111A', '222B', '333C']]

标签: javascriptarrayssorting

解决方案


您可以按一对分组,对它们进行排序并返回一个平面数组。

var array = ['789', ['111', '222', '333'], '456', ['444', '555', '666'], '123', ['777', '888', '999']],
    result = array
        .reduce((r, v, i) => {
            if (i % 2) r[r.length - 1].push(v);
            else  r.push([v]);
            return r;
        }, [])
        .sort(([a], [b]) => a - b)
        .reduce((r, a) => r.concat(a), []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读