首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javascript中手动对数组排序

问在javascript中手动对数组排序
EN

Stack Overflow用户
提问于 2015-04-22 02:40:25
回答 4查看 5.8K关注 0票数 1

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

代码语言:javascript
复制
ABC
QRS
DEF
HIJ
TUV
KLM
NOP

我需要在javascript中按字母顺序对这个数组进行排序,除了一些已知的值。即我需要DEF和NOP在前2个位置,并按字母升序对数组的其余部分进行排序。下面是我编写的按字母顺序对整个数组进行排序的代码,现在我需要前两个位置的两个值。

代码语言:javascript
复制
array.sort(function(a,b){return ((a < b) ? -1 : (a > b) ? 1 : 0)});

预期结果。

代码语言:javascript
复制
DEF
NOP
ABC
HIJ
KLM
QRS
TUV

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

EN

回答 4

Stack Overflow用户

发布于 2015-04-22 02:47:24

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

代码语言:javascript
复制
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"]
票数 5
EN

Stack Overflow用户

发布于 2015-04-22 02:52:57

如果您想要允许、计数和提升这些字符串的多个实例:http://jsfiddle.net/4hgnjqas/1/

下面将计算您想要提升到前面的字符串的所有已知实例,从现有数组中删除它们,对其进行排序,然后将相同数量的“DEF”和“NOP”添加到数组中。

代码语言:javascript
复制
var hoist = {"NOP":0, "DEF":0}

for(var p in hoist)
    while(array.indexOf(p)>-1){
        array.splice(array.indexOf(p),1);
        hoist[p]++;
    }
arr.sort();
for(var p in hoist){
    for(var i=0;i<hoist[p];i++)
        array.unshift(p);
}
console.log(array);
票数 0
EN

Stack Overflow用户

发布于 2015-04-22 02:54:54

这可能是更简单的一个

代码语言:javascript
复制
var arr = ['ABC','QRS','DEF','HIJ','TUV','KLM','NOP']
var exclude = ['DEF', 'NOP'];

arr.sort(function(a,b) {
    if(exclude.indexOf(a) > -1 && exclude.indexOf(b) > -1)
        return ((a < b) ? -1 : (a > b) ? 1 : 0);
    if(exclude.indexOf(b) > -1) 
        return 1;
    return ((a < b) ? -1 : (a > b) ? 1 : 0)
});

alert(JSON.stringify(arr))  //result

*已更新

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29780546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档