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

3
例如,我有一个字符串数组['item 2','item 1','item 10','item 4']。我想将其变成['item 1','item 2','item 4','item 10'],但是默认情况下sort()函数按字母顺序排序值,这意味着它看起来像['item 1','item 10','item 2','item 4']

有了特定的输入(以及它的变体,一个由字符串和数字组成的常量),array.sort((a, b) => a.localeCompare(b, 'EN', {numeric: true})); 就可以解决问题。 - Teemu
6个回答

5

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

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);


3

你可以在 array.sort 中添加自定义的比较函数。

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);


2
您可以将一个函数传递给 sort() 方法,以自定义方式进行排序。
let result = arr.sort((a,b) => a.split(' ')[1]-b.split(' ')[1])

console.log(result);

2
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 ",""))));


2

制作一个自定义的sort()函数,使用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);


2

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

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)
);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接