我有一个这样的字符串:
var allString = "|AQW12|2|34|33|12|<br>|AQW11|2|34|33|12|<br>|AQW09|2|34|33|12|<br>";
基本上,这是某种表格,其中列名将被分隔|
并分隔<br>
行。
我的问题是如何按第 2 列(即 AQW12、AQW11 等)对 allString 进行排序。
谢谢
我有一个这样的字符串:
var allString = "|AQW12|2|34|33|12|<br>|AQW11|2|34|33|12|<br>|AQW09|2|34|33|12|<br>";
基本上,这是某种表格,其中列名将被分隔|
并分隔<br>
行。
我的问题是如何按第 2 列(即 AQW12、AQW11 等)对 allString 进行排序。
谢谢
快速解决方案,请原谅错误的变量名:
var allString = "|AQW12|2|34|33|12|<br>|AQW11|2|34|33|12|<br>|AQW09|2|34|33|12|<br>";
var l1 = allString.split("<br>");
var l2 = l1.map( function(elem) { return elem.split("|"); } )
var l3 = l2.sort( function(a,b) { return a[1].localeCompare(b[1]); } )
var l4 = l3.map( function(elem) { return elem.join("|"); } );
var output = l4.join("<br>");
console.log(allString);
console.log(output);
输出:
|AQW12|2|34|33|12|<br>|AQW11|2|34|33|12|<br>|AQW09|2|34|33|12|<br>
|AQW09|2|34|33|12|<br>|AQW11|2|34|33|12|<br>|AQW12|2|34|33|12|<br>
该变量l3
包含数组形式的数据:
[ [ 'AQW09', '2', '34', '33', '12' ],
[ 'AQW11', '2', '34', '33', '12' ],
[ 'AQW12', '2', '34', '33', '12' ] ]
有关评论localCompare
,请参阅https://stackoverflow.com/a/2167619/1689451
当然,如果你想炫耀,你也可以使用方法链:)
var output = allString.split("<br>")
.map( function(elem) { return elem.split("|"); } )
.sort( function(a,b) { return a[1].localeCompare(b[1]); } )
.map( function(elem) { return elem.join("|"); } )
.join("<br>");
如果此列始终采用相同的模式,例如 3 个字母和 2 个数字(AQW12、AQW11)。
你可以这样做:
var allString = "|AQW12|2|34|33|12|<br>|AQW11|2|34|33|12|<br>|AQW09|2|34|33|12|<br>"
var allRows = allString.split('<br>');
var sortedRows = allRows.sort(function(a,b){
if(a && b ){
var arrA = a.split('|');
var arrB = b.split('|');
return new Number(arrA[1].substr(3,2)) - new Number(arrB[1].substr(3,2));
}
return null;
});
var sortedString = sortedRows.join('<br>');
>> |AQW09|2|34|33|12|<br>|AQW11|2|34|33|12|<br>|AQW12|2|34|33|12|<br>
可能最简单的方法是将其拆分为一个数组,对其进行排序并重新组合:
var rows = allString.split("<br>");
//sort...
var sortedString = rows.join("<br>");
JavaScript 数组有一个内置的排序方法,它接受一个自定义比较函数,您可以定义它来比较每个字符串中的第二项:
function compare(rowA, rowB) {
var rowAcol2 = rowA.split("|")[1];
var rowBcol2 = rowB.split("|")[1];
return rowAcol2.localeCompare(rowBcol2);
}
然后传入 sort 方法:
rows.sort(compare);
var allString = "|AQW12|2|34|33|12|<br>|AQW11|2|34|33|12|<br>|AQW09|2|34|33|12|<br>";
var arr = allString.split("<br>");
var re=/AQW([\d]+)/;
arr.sort(function(a,b){
if(!(a && b)) return -1;
x=a.split("|")[1];
y=b.split("|")[1];
return(parseInt(x.match(re)[1]) - parseInt(y.match(re)[1]));
});
console.log(arr.join("<br>"));