javascript - 在javascript中手动对数组进行排序

标签 javascript sorting

我有一个如下所示的字符串数组。

ABC
QRS
DEF
HIJ
TUV
KLM
NOP

我需要在 JavaScript 中按字母顺序对这个数组进行排序,除了少数已知的值。即我需要 DEF 和 NOP 位于前 2 个位置,并按字母升序对数组的其余部分进行排序。这是我编写的用于按字母顺序对整个数组进行排序的内容,现在我需要前 2 个位置的 2 个值。

array.sort(function(a,b){return ((a < b) ? -1 : (a > b) ? 1 : 0)});

预期结果。

DEF
NOP
ABC
HIJ
KLM
QRS
TUV

数组的内容是动态的,因此如果数组有 DEF 或 NOP,那么它们应该位于顶部,否则,应该按字母顺序排序。解决这个问题的最佳方法是什么?

最佳答案

我认为最直接的方法是单独删除已知元素,而不是尝试将它们合并到排序中。这样,您也可以直接排序而不使用比较函数。

function sortWithKnownPrefix(prefix, arr) {
    // Get the non-prefix elements
    var rest = arr.filter(function (item) {
        return prefix.indexOf(item) === -1;
    });

    // Concatenate the prefix and the sorted non-prefix elements
    return prefix.concat(rest.sort());
}

sortWithKnownPrefix(
    ["DEF", "NOP"],
    ["ABC", "QRS", "DEF", "HIJ", "TUV", "KLM", "NOP"]
)
// ["DEF", "NOP", "ABC", "HIJ", "KLM", "QRS", "TUV"]

关于javascript - 在javascript中手动对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29780546/

相关文章:

javascript - 获取 iframe 的高度

java - 按升序对整数进行排序

c - 在 C 中进行合并排序时不断获取垃圾值

java - 用于计算单词数组中单词出现次数的循环

带有复杂对象的 Javascript 推送

javascript - Blur 上的个人输入验证

javascript - 使用 BootstrapValidator 的动态表单

javascript - 密码验证(2 个文本框,比较)

php - 根据元素出现的频率对整数数组进行排序。如果两个元素的频率相同,则它们将按升序打印

javascript - 如何根据另一个数组中的值并记住使用数组序列来特定对象中的键值