gpt4 book ai didi

javascript - 在javascript中对混合服装尺寸的数组进行排序

转载 作者:行者123 更新时间:2023-12-04 14:12:09 25 4
gpt4 key购买 nike

假设我有一个如下所示的数组:

$array = ['xl', 's', '1', '10', '3', 'xs', 'm', '3T', 'xxl', 'xxs', 'one size'];
我想对数组进行排序,如下所示:
$sortedArray = ['1', '3', '3T', '10', 'one size', 'xxs', 'xs', 's', 'm', 'xl', 'xxl'];
我怎么可能在 javascript 中对这个数组进行排序?
我可以发现一个模式,以便帮助我走上正确的轨道,但我无法弄清楚排序功能。以数字开头的所有尺寸的模式都是第一个,按数字排序(但不确定“3T”如何处理)。然后我们显示“一种尺寸”,然后我们根据预定义的顺序对其余的(XXS、XS、S、M、L、XL、XXL)进行排序。

最佳答案

将排序与用户定义的排序算法一起使用:我将两者都解析为与 Int 进行比较。如果其中只有一个是数字,我会比以前看。如果两者都是数字,那么我看两者是否相等。如果是这样,那么我从字符串中取出其余部分(它不是 Int 的一部分)并按字母顺序比较它们。否则我比较两个整数。
如果以上所有情况都不是真的,那么我有我的 ORDER 数组和糖果大小,我对 indexOf 进行排序。如果缺少任何内容,您可以轻松添加它们。
扩展:因为尺寸有时是 xxlXXL我将它们转换为小写,以便根据需要对它们进行排序。
扩展2:因为2XL将被排序到数字的开头我做了另一个技巧:解析为整数后,我查看字符串是否是 ORDER 数组中的一个。如果是这样,我将解析的整数设置为 NaN就像那里有一个字符串。通过这种方式,该条目的关键字比较发生。
扩展 3: 0 的排序是错误的,我将其添加到开头(如 OP 的提案)。

array = ['XL', 's', '1', '10', '2xl', '3', '0', 'xs', 'm', '3T', 'xxl', 'xxs', 'one size'];
const ORDER = ['one size', 'xxs', 'xs', 's', 'm', 'xl', '2xl', 'xxl'];

array.sort((a,b) => {
a = a.toLowerCase();
b = b.toLowerCase();

let nra = parseInt(a);
let nrb = parseInt(b);

if ((ORDER.indexOf(a)!=-1)) nra = NaN;
if ((ORDER.indexOf(b)!=-1)) nrb = NaN;

if (nrb===0) return 1;
if (nra&&!nrb || nra===0) return -1;
if (!nra&&nrb) return 1;
if (nra && nrb) {
if (nra==nrb) {
return (a.substr((''+nra).length)).localeCompare((a.substr((''+nra).length)));
} else {
return nra-nrb;
}
} else {
return ORDER.indexOf(a) - ORDER.indexOf(b);
}
});

console.log(array);

关于javascript - 在javascript中对混合服装尺寸的数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63491179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com