2

私はこのような文字列を持っています:

var allString = "|AQW12|2|34|33|12|<br>|AQW11|2|34|33|12|<br>|AQW09|2|34|33|12|<br>";

|基本的に、これは、列名が行の区切りで区切られ、行を<br>区切るある種のテーブルです。

私の質問は、allStringを列2(つまり、AQW12、AQW11など)で並べ替える方法です。

ありがとうございました

4

4 に答える 4

1

簡単な解決策、悪い変数名を許してください:

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' ] ]

に関するコメントについては、 https://stackoverflow.com/a/2167619/1689451localCompareを参照してください。

もちろん、見せびらかしたい場合は、メソッドチェーンを使用することもできます:)

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>");
于 2012-10-12T18:27:42.353 に答える
0

この列が常に同じパターン (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>

于 2012-10-12T18:25:27.720 に答える
0

おそらく最も簡単な方法は、配列に分割し、並べ替えて、再結合することです。

var rows = allString.split("<br>");
//sort...
var sortedString = rows.join("<br>");

JavaScript 配列には、カスタム比較関数を受け入れる組み込みの sort メソッドがあり、各文字列の 2 番目の項目を比較するように定義できます。

function compare(rowA, rowB) {

    var rowAcol2 = rowA.split("|")[1];
    var rowBcol2 = rowB.split("|")[1];

    return rowAcol2.localeCompare(rowBcol2);
}

次に、sort メソッドに渡します。

rows.sort(compare);

このJSBinはそれをまとめて示しています。

于 2012-10-12T18:28:08.620 に答える
0
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>"));
于 2012-10-12T18:29:29.287 に答える