[英]Javascript sort an array of strings that containing numbers
我正在尝试对有时包含数字的字符串数组进行排序。
以下是可能收到的数组示例和预期结果:
这是我的实际代码: all_values 是我必须排序的数组。
const customSort = (a, b) => {
return (Number(a.match(/(\d+)/g)[0]) - Number((b.match(/(\d+)/g[0])))
;};
const hasNumber = (myString) => {
return /\d/.test(myString);};
// Sort filters
this.product.product_filter.map(filter => {
if (hasNumber) {
filter.all_values = filter.all_values.sort(customSort);
} else {
filter.all_values = filter.all_values.sort();}
});
在此先感谢您的帮助。
var collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});
var myArray = ['1_Document', '11_Document', '2_Document'];
console.log(myArray.sort(collator.compare));
我相信您的问题在于您如何使用hasNumber
。 如果您将其用作条件,它将始终是真实的。 function
中的 function 始终是真实的,这意味着您的第一个条件将始终得到满足,并且永远不会碰到您的else
块。
我认为您正在查看是否可以将数组中的任何元素转换为数字。 在这种情况下,您需要检查整个数组。 这就是Array#some
或Array#every
的设计目的。 根据您的要求,您可以:
在任何一种情况下,您都在任何时间点检查单个字符串。 为了清楚起见,我相信hasNumber
应该重命名为isNumber
。
const isNumber = (myString) => /\d/.test(myString);};
// ...
const hasNumber = filter.every(str => isNumber(str)) // if every element the array can be converted to a number
if (hasNumber) {
您可以在回调内部分支到Array.sort
:
1-如果元素包含数值,则根据这些值排序
2-else 按字母顺序排序
function sortAlphaNumeric(arr) { return arr.sort((first,second) => { let re = /\d+/; if(re.test(first) && re.test(second)){ return parseInt(first.match(re) - parseInt(second.match(re))) } else{ return first.codePointAt(0) - second.codePointAt(0) } }) } console.log(sortAlphaNumeric(["12W", "60W", "25W"])) console.log(sortAlphaNumeric(["IP67", "IP68", "IP20"])) console.log(sortAlphaNumeric(["White", "Red", "Black"])) console.log(sortAlphaNumeric(["100cm", "10cm", "50cm"])) console.log(sortAlphaNumeric(["3000°K", "2700°K", "2000°K"]))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.