繁体   English   中英

如何按数字顺序对字符串数组进行排序?

[英]How to sort an array of strings by numerical order?

例如,我有一个字符串数组['item 2','item 1','item 10','item 4'] 我希望它像这样['item 1','item 2','item 4','item 10']但默认情况下, sort() function 按字母顺序对值进行排序,这意味着它看起来像这样['item 1','item 10','item 2','item 4']

只需获取数字并对其进行排序

 let array = ["item 1", "item 10", "item 2", "item 4"]; const result = array.sort((a, b) => a.match(/\d+/) - b.match(/\d+/)); console.log(result);

您可以在 array.sort 中添加自定义比较function

 const myArr = ['item 2','item 1','item 10','item 4']; const sortArr = myArr.sort((a, b) => { const num1 = Number(a.split(' ')[1]); const num2 = Number(b.split(' ')[1]); return num1 - num2; }); console.log(sortArr);

或者干脆

 const myArr = ['item 2','item 1','item 10','item 4']; const sortArr = myArr.sort((a, b) => Number(a.split(' ')[1]) - Number(b.split(' ')[1])) console.log(sortArr);

您可以将 function 传递给sort()方法并以自定义方式对其进行排序

let result = arr.sort((a,b) => a.split(' ')[1]-b.split(' ')[1])

console.log(result);
let array = ['item 1','item 10','item 2','item 4']; var customSort = function (a, b) { return Number(a.replace("item ","")) - Number(b.replace("item ","")); } console.log(array.sort(customSort)); //one line console.log(array.sort((a,b) => Number(a.replace("item ","")) - Number(b.replace("item ",""))));

制作自定义sort() function并使用slice获取字符串的编号,然后应用Number()将其转换为数字进行比较。

注意: sort()将更新原始数组。

 const array = ["item 1", "item 10", "item 2", "item 4"]; array.sort((a, b) => Number(a.slice(5)) - Number(b.slice(5))); console.log(array);

你可以选择任何答案。 这是一个更通用的解决方案,用于对以数值结尾(或不是)的字符串进行排序。

 const toNumberOrZero = str => { const maybeNumber = str.match(/(\d+)$/); return maybeNumber && +maybeNumber[0] || 0; }; const sortNumericForStringsEndingWithNumbers = (a, b) => toNumberOrZero(a) - toNumberOrZero(b); console.log( ['item 2', 'item 1', 'item 10', 'item 4', 'item222', 'anything1023', 'notanumber', 'the meaning of life is 42'].sort(sortNumericForStringsEndingWithNumbers) );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM