我有一个像这样的字符串:

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>");

10-07 16:19
查看更多