我尝试了一些我在SO上找到的正则表达式排序,但我认为它们可能不喜欢流中的+符号进行排序。 所以我得到看起来像这样的(3至30个字母“+” 0到64000号)当数字相同时,保留字母顺序的流的数字排序
userString = "AAA+800|BBB+700|CCC+600|ZZZ+500|YYY+400|XXX+300|XXA+300|XXZ+300";
输出需要在格式的数据流:
array[0] = "XXA+300" // 300 being the lowest num and XXA being before XXX
array[...]
array[7] = "AAA+800"
我希望从最低的数字到最高的数字进行排序并反转。 这是我低效的代码。循环8x8次。 (我的流可能有200个项目)
它可以工作,但看起来很乱。有人可以帮我改进它,所以它使用更少的迭代?
var array = userString.split('|');
array.sort();
for(var i=0; i<len; i++) { // array2 contains just the numbers
bits = array[i].split('+');
array2[i] = bits[1];
}
array2.sort();
if(sort_order==2)
array2.reverse();
var c=0;
for(var a=0;a<len;a++) { // loop for creating array3 (the output)
for(var i=0; i<len ; i++) { // loop thru array to find matching score
bits = array[i].split('+');
if(bits[1] == array2[a]) { // found matching score
array3[c++] = bits[0]+'+'+bits[1]; // add to array3
array[i]='z+z'; // so cant rematch array position
}
}
}
array = array3;
亲切的问候
嗨,呃倒过来,因为数字是相反的,但阿尔法依然保持有序。其实我得到这个错误:对象800没有方法'localeCompare' – ChrisAdmin 2011-12-27 09:57:08
什么浏览器?这个错误表明你在一个不是字符串的对象上调用'localeCompare'。像任何其他错误一样调试它。确保'userArr','aLetters'和'bLetters'包含你期望他们每次迭代的内容。如果他们不这样做,找出原因。 如果你想让数字反转,只需将'return aLetters.localeCompare ...'改为'return -aLetters.localeCompare ...'。进一步阅读:[(1)](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/localeCompare)[(2)](https://developer.mozilla.org/en/JavaScript /参考/ Global_Objects /阵列/排序)。 – 2011-12-29 09:46:18
@Jordan,在电话上键入帖子?无论是英雄还是瘾君子:-) – Kos 2011-12-29 09:59:09