我有一个数组,所有元素都是字符串。我想按字母顺序对它们进行排序,所以我知道我应该使用sort()
函数。但我想要发生的是它会根据它们的内容忽略前几个字符。
例如,如果有一个数组['<FILE> dogs', '<DIR> more', '<FILE> cats']
,我将如何使其忽略文本&lt; FILE&gt;并且,按照它们之后的文本对这些字符串进行排序?我是否必须创建自定义排序功能?
答案 0 :(得分:2)
您可以删除标记,例如此answer,并将其余字符串作为可排序结果。
var array = ['<FILE> dogs', '<DIR> more', '<FILE> cats'];
array.sort(function (a, b) {
function getRaw(s) {
return s.replace(/<(?:.|\n)*?>/gm, '').trim();
}
return getRaw(a).localeCompare(getRaw(b));
});
console.log(array);
&#13;
答案 1 :(得分:0)
要解决这样的问题,我建议你创建一个空数组,然后遍历传入的数组,用空字符串替换匹配<FILE>, <DIR>
的任何字符串,并推送到空数组,之后你就会#39 ; ll在新数组上应用sort函数。
答案 2 :(得分:0)
可能是一种非常简单的方法;
var sorted = ['<FILE> dogs', '<DIR> more', '<FILE> cats'].sort((a,b) => a.split(/>\s*/)[1].localeCompare(b.split(/>\s*/)[1]));
console.log(sorted);
&#13;
答案 3 :(得分:-1)
您可以创建自己的排序功能,如下所示。在此函数中,您可以使用正则表达式或其他任何方式对数组进行排序。下面的代码片段对数组进行排序,但只要这是'a',就会忽略第一个字符。
var arr = ["aa", "ab", "ac", "ba", "bb", "bc" ];
var removeFirstA = function (str) {
return str[0] === "a" ? str.substr(1) : str;
};
arr.sort(function (obj1, obj2) {
return removeFirstA(obj1).localeCompare(removeFirstA(obj2));
});
document.body.innerHTML = arr;