2016-02-09 61 views
0

鉴于阵列:字母数组排序 - 小写第一

var myArray = ['d','a','k','v','z','A','t','G'] 

如果我使用:

myArray.sort() 

其结果将是:

myArray = ['A','G','a','d','k','t','v','z'] 

是否存在的一种方式修改排序函数或输出以将大写字母放在数组的末尾,如下所示:

myArray = ['a','d','k','t','v','z','A','G'] 

无论是纯Javascript还是jQuery都可以。

+2

[是]( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) – Bergi

+0

@Pat:你知道你是棒球琐事问题的答案的最后一部分,“Dave McNally,Mike Cuellar,Jim Palmer和......”? –

+0

我没有。但考虑到我只在谷歌搜索我的名字后才听说(更有名的)帕特多布森,我并不感到惊讶。 –

回答

2

测试的第一个字符,并应用比较:

var myArray = ['d', 'a', 'k', 'v', 'z', 'A', 't', 'G', 'V']; 
 

 
myArray.sort(function (a, b) { 
 
    if (a[0] === a[0].toLocaleLowerCase() && b[0] === b[0].toLocaleLowerCase() || 
 
     a[0] === a[0].toLocaleUpperCase() && b[0] === b[0].toLocaleUpperCase()) { 
 
     return a.localeCompare(b); 
 
    } 
 
    if (a[0] === a[0].toLocaleLowerCase()) { 
 
     return -1; 
 
    } 
 
    return 1; 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(myArray, 0, 4) + '</pre>');

0

一旦你得到了这个阵列

myArray = ['a','d','k','t','v','z','A','G'] 

这样做是为了得到它myArray = ['A','G','a','d','k','t','v','z']

var tempArray = myArray.join("").split(/(?=[A-Z])/); 
myArray = tempArray.slice(1).concat(tempArray [0].split("")); 
0

排序,您应该使用自定义compare functionmyArray.sort(compareFunction)。在函数内部,您可以使用 条件(如if(a === a.toUpperCase())等)创建您需要的逻辑。

0
var myArray = ['d','a','k','v','z','A','t','G']; 
_.each(myArray, function(item){ 
    if(item.charCodeAt(0) > 96){ 
     smallArr.push(item) 
    } 
    else{ 
     captArray.push(item) 
    } 
}); 
smallArr.sort(); 
captArray.sort(); 
myArray = []; 
myArray.push.apply(myArray, smallArr.concat(captArray)); 
0

这里的排序使用比较函数的阵列的例子:

myArray.sort(function(a, b){ 

    var test = a.charCodeAt(0) <= 90 && b.charCodeAt(0) <= 90; 

    if(test) return a.charCodeAt(0)-b.charCodeAt(0); 
    else if(a.charCodeAt(0) <= 90) return 1; 
    else if(b.charCodeAt(0) <= 90) return -1; 
    else return a.charCodeAt(0)-b.charCodeAt(0); 

});