排序数组忽略特殊字符和整数?

时间:2017-05-11 18:41:44

标签: javascript arrays sorting

我一直在尝试使用由字母,整数和字符组成的字符串对数组进行排序和数组。这就是我所做的:

var vList =["IEC - 62877-1 ", "IEC - 60622 ", "CAN/CSA - F382-M89 (2014) ", "Telcordia - GR-3150-CORE ", "UL - 1973"];

vList.sort(function(a,b) {
return a.split(' - ')[0] - b.split(' - ')[0];
});

print(vList)

这个想法是通过使用字符串的第一个字母元素按字母顺序对数组进行排序:" IEC"," CAN"," Telecordia" ," UL"。

数组应如下所示:

vList = ["CAN/CSA - F382-M89 (2014)", "IEC - 62877-1 ", "IEC - 60622 ","Telcordia - GR-3150-CORE ", "UL - 1973"];

4 个答案:

答案 0 :(得分:0)

您可以使用Array#sort

的内置排序功能
  

sort() 方法对数组in place的元素进行排序并返回数组。排序不一定是stable。默认排序顺序是根据字符串Unicode代码点。



var vList =["IEC - 62877-1 ", "IEC - 60622 ", "CAN/CSA - F382-M89 (2014) ", "Telcordia - GR-3150-CORE ", "UL - 1973"];

vList.sort();

console.log(vList);




使用sorting with map维护原始订单的提案。



var vList =["IEC - 62877-1 ", "IEC - 60622 ", "CAN/CSA - F382-M89 (2014) ", "Telcordia - GR-3150-CORE ", "UL - 1973"],
    mapped = vList.map(function(el, i) {
        return { index: i, letter: el[0] };
    });

mapped.sort(function(a, b) {
    return a.letter.localeCompare(b.letter) || a.index - b.index;
});

// container for the resulting order
var result = mapped.map(function(el){
    return vList[el.index];
});

console.log(result);




答案 1 :(得分:0)

如果您只想查看起始的第一个字符串字符,而不是整个字符串,则可以在sort函数中进行localeCompare。



var vList =["IEC - 62877-1 ", "IEC - 60622 ", "CAN/CSA - F382-M89 (2014) ", "Telcordia - GR-3150-CORE ", "UL - 1973"];

vList.sort(function(a, b) {
    var string1 = /[a-zA-Z]+/.exec(a);
    var string2 = /[a-zA-Z]+/.exec(b);
    if(string1 && string2) {
        return string1[0].localeCompare(string2[0]);
    } else {
        return a - b
    }
})

console.log(vList);




请注意,如果您尝试排序的其中一个条目是" 62877-1 IEC",它会以您可能没有想到的方式行事,因为它仍会尝试根据IEC进行排序,即使它是在数字之后。它也只使用" CAN"在" CAN / CSA"因为正斜杠而进入,但似乎你想从那个帖子那样想要它。

答案 2 :(得分:0)

您的解决方案对您的案例非常特殊。但是,您必须使用正则表达式来描述字符串,或者像您一样,通过拆分或执行其他操作来描述字符串。修复您的方法:

vList.sort(function(a,b) {
  return a.split(' - ')[0].localCompare(b.split(' - ')[0]);
});

使用本地(对浏览器语言)比较字符串并返回正确的值。

答案 3 :(得分:0)



var vList =["IEC - 62877-1 ", "IEC - 60622 ", "CAN/CSA - F382-M89 (2014) ", "Telcordia - GR-3150-CORE ", "UL - 1973"];

vList.sort(function(a,b) {
if(a.split('-')[0]> b.split('-')[0]) 
   return 1;
else if(a.split('-')[0]< b.split('-')[0])
   return -1;
return 0;
})

print(vList);
&#13;
&#13;
&#13;

这应该可以正常工作。你做的一切都很好,而不是减去你可以使用&gt;或大于并返回1,-1&amp; 0因此。