如何对JavaScript数组进行排序,使数字排在字母之后,并正确按数字大小排序?

3
我的数组当前的输出是: "10 FOOT", "45 RPM", "9 VOLT", "910D0", "AGUA", "BEAST", "KEN 5", "NEMCO" 我想要的是: "AGUA", "BEAST", "KEN 5", "NEMCO", "9 VOLT", "10 FOOT", "45 RPM", "910D0" 我该怎么做?

为什么结尾处的数字比按字母顺序排序更优先?等等,结尾处的数字与问题有什么关系? - Roko C. Buljan
这篇文章是否解决了你的问题?https://stackoverflow.com/questions/18939726/javascript-array-sorting-only-first-letter-only-first-number - MWO
你需要更详细地解释你的排序标准... - Majed Badawi
1
让我们澄清一下,这是你想要的吗?如果一个元素以字母开头,则按字母顺序排序。如果它以数字开头,则按数字值(不仅仅是第一个数字)进行排序,最后,以数字开头的元素应该排在以字母开头的元素之后? - blex
请发布可编译的代码。那些引号会抛出错误。 - adiga
显示剩余2条评论
4个回答

2
你可以检查字符串是否以数字开头,然后按组对其余部分进行排序。

const array = ['10 FOOT', '45 RPM', '9 VOLT', '910D0', 'AGUA', 'BEAST', 'KEN 5', 'NEMCO'];

array.sort((a, b) => isFinite(a[0]) - isFinite(b[0])
    || a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' })
);

console.log(array);


2

const order = ["10 FOOT", "45 RPM", "9 VOLT", "910D0", "AGUA", "BEAST", "KEN 5", "NEMCO"];

order.sort((a, b) => /^[0-9]/.test(a) - /^[0-9]/.test(b) || a.localeCompare(b, undefined, { numeric: true }));

console.log(order);

首先按照数字排序元素,然后使用localeCompare的数字选项进行排序(确保"10" > "2")。


0

const arr = ["10 FOOT", "45 RPM", "9 VOLT", "910D0", "AGUA", "BEAST", "KEN 5", "NEMCO"];

const customCompare = (a, b) => 
  /^\d/.test(a) - /^\d/.test(b) || 
  a.localeCompare(b, undefined, { numeric: true });

const sorted = arr.sort(customCompare);

console.log(...sorted);


0
你可以创建两个新的数组,对它们进行排序,然后将它们合并在一起:
const arr = ["10 FOOT", "45 RPM", "9 VOLT", "910D0", "AGUA", "BEAST", "KEN 5", "NEMCO"];
const nums = arr.filter(a => parseInt(a))
const words = arr.filter(a => !parseInt(a))

nums.sort((a,b) => parseInt(a) -parseInt(b))
words.sort()

const finalArray = words.concat(nums)

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