javascript - 如何根据第一个值对数组进行排序?
问题描述
我有一个包含字符串和数组的数组。每个字符串都与它旁边的数组相关联。例如,字符串 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']]
解决方案
您可以按一对分组,对它们进行排序并返回一个平面数组。
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; }
推荐阅读
- vue.js - 如何使用 Vuex 获取和设置值?
- ios - 在 AppSync 中获取“软件导致连接中止”
- javascript - 从 html javascript 中删除反斜杠
- r - R如何逐步将向量的元素相加?
- google-cloud-platform - 在 GKE 上安装 coredns
- java - OkHttp3 在慢速互联网上从不超时
- scala - 如何动态替换 Spark jar 中的类型安全包含语句
- c++ - 构建静态qt时未解决的外部问题
- symfony - Symfony,集合,多个实体,得到arrayCollection,需要实体
- ios - 如何使用 SwiftLint 排除 Pod 警告