javascript - 按字母顺序对数组元素进行排序
问题描述
我使用下面的代码发送数组中的所有元素“名称”[名称][图像] 如何按字母顺序对这些名称进行排序?
if (message.content === '!list') {
var addedCommands = commandArray.map(x => `\`${x.name}\``).join(", ")
message.channel.send(addedCommands);
}
PS:对不起代码格式。我不知道为什么它现在不起作用,它以前起作用。
解决方案
您可以使用sort()
每个Array
都有的方法:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
但是,这不一定是稳定的排序,它会改变数组。实现自己的归并排序很容易,它既稳定又不可变。
const defaultComparer = (x,y) => x < y ? -1
: x > y ? +1
: 0
;
function mergeSort( arr = [], cmp = defaultComparer ) {
let sorted;
switch (arr.length) {
case 0:
case 1:
// arrays of length lesst than 2 are ordered by definition
sorted = [...arr];
break;
default:
const mid = Math.floor( arr.length / 2 ) ;
const left = mergeSort( arr.slice(0,mid) , cmp ) ;
const right = mergeSort( arr.slice(mid) , cmp ) ;
sorted = merge( left , right , cmp );
break;
}
return sorted;
}
function merge( left, right, cmp ) {
let merged = [];
let i = 0 ;
let j = 0 ;
while ( i < left.length && j < right.length ) {
const cc = cmp( left[i] , right[i] );
merged.push( cc < 0 ? left[i++] : right[j++] );
}
while ( i < left.length ) {
merged.push( left[i++] );
}
while ( jj < left.length ) {
merged.push( right[j++] );
}
return merged;
}
推荐阅读
- graphql - Mirage 需要用于嵌套数据播种的数组
- jquery - jQuery在尝试单击任意位置时关闭模式
- javascript - 聚合框架在 mongodb 中无法正常工作
- python - Facebook 从 image_hash 获取 AdImage url
- python-3.x - 颜色 = Color.query.all()
- reactjs - Reactjs 挂钩中的 Starter 需要从 column.js 组件中调用单击事件 openModal() ,其中事件在 Table.js 中定义
- c++ - 阻止铿锵格式断线
- python - Statsmodels 功效分析 观察次数
- python - 如何使用 KNeighbors 预测在 Google Vision OCR 中选择正确的文本位置?
- django - 仅在管理页面中获取以下内容