排序数组,但在开头忽略一些特定字符

时间:2017-08-20 09:06:05

标签: javascript arrays sorting

我有一个数组,所有元素都是字符串。我想按字母顺序对它们进行排序,所以我知道我应该使用sort()函数。但我想要发生的是它会根据它们的内容忽略前几个字符。

例如,如果有一个数组['<FILE> dogs', '<DIR> more', '<FILE> cats'],我将如何使其忽略文本&lt; FILE&gt;并且,按照它们之后的文本对这些字符串进行排序?我是否必须创建自定义排序功能?

4 个答案:

答案 0 :(得分:2)

您可以删除标记,例如此answer,并将其余字符串作为可排序结果。

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:0)

要解决这样的问题,我建议你创建一个空数组,然后遍历传入的数组,用空字符串替换匹配<FILE>, <DIR>的任何字符串,并推送到空数组,之后你就会#39 ; ll在新数组上应用sort函数。

答案 2 :(得分:0)

可能是一种非常简单的方法;

&#13;
&#13;
var sorted =  ['<FILE> dogs', '<DIR> more', '<FILE> cats'].sort((a,b) => a.split(/>\s*/)[1].localeCompare(b.split(/>\s*/)[1]));
console.log(sorted);
&#13;
&#13;
&#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;