- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个如下所示的数组:
$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 中对这个数组进行排序?
最佳答案
将排序与用户定义的排序算法一起使用:我将两者都解析为与 Int 进行比较。如果其中只有一个是数字,我会比以前看。如果两者都是数字,那么我看两者是否相等。如果是这样,那么我从字符串中取出其余部分(它不是 Int 的一部分)并按字母顺序比较它们。否则我比较两个整数。
如果以上所有情况都不是真的,那么我有我的 ORDER 数组和糖果大小,我对 indexOf 进行排序。如果缺少任何内容,您可以轻松添加它们。
扩展:因为尺寸有时是 xxl
或 XXL
我将它们转换为小写,以便根据需要对它们进行排序。
扩展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/
我在 IntelliJ 中创建了一个 gradle java 项目来处理从文件中写入和读取 JSON 对象。它还包含 2 个服装异常类。我的 libgdx 游戏项目需要这个用于当前正在开发的 andr
我想用这种结构进行 Activity : 这个想法是在顶部放置一些文本,在顶部放置一个横幅,在横幅上方放置按钮,并将我的 Canvas 放在 View 的中心,使用所有可能的空间。 我对 View 进
我正在开发一个 ASP.Net 电子商务应用程序。我使用 ASP.Net Web 表单。当我完成整个应用程序时,我考虑缓存一些数据,以便提高应用程序性能。 (坏主意......我必须从一开始就考虑到这
我是一名优秀的程序员,十分优秀!