0

文字列の最初の単語に基づいて、JavaScriptで配列とオブジェクトの配列を並べ替えることができるようにしたいと思います。現在、私が使用している並べ替え関数は、文字列内のすべての単語を使用しています。

JSONデータ:

"awds": [
    {"awd":"adobe edge award"},
    {"awd":"besty"},
    {"awd":"c award"},
    {"awd":"awwward award"},
    {"awd":"desk award"},
    {"awd":"adobe edge award"},
    {"awd":"creative edge award"},
    {"awd":"snoogle edge award"},
    {"awd":"scuba edge award"},
    {"awd":"xidoe edge award"}
]

JavaScript:

var compareNames = function(a, b) {
    var nameA = a.awd.toLowerCase();
    var nameB = b.awd.toLowerCase();
    if (nameA > nameB) { return 1; }
    return 0;
};

現在の出力:

adobe edge award
besty
c award
awwward award
desk award
adobe edge award
creative edge award
snoogle edge award
scuba edge award
xidoe edge award

必要な出力:

adobe edge award
adobe edge award
awwward award
c award
creative edge award
scuba edge award
snoogle edge award
xidoe edge award
4

4 に答える 4

1

Array.sort比較機能で使用できます。https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sortを参照してください

于 2013-02-11T17:39:21.250 に答える
1
  1. ソートコールバックは、引数1が引数2より小さいか、等しいか、大きいかに応じて、負の0、正の数を返す必要があります。
  2. 並べ替えはオリジナルで行われるため、結果を「割り当てる」必要はありません。
  3. 正規表現を使用して最初の単語を抽出できます(なぜそのように並べ替えたいのかわかりません)
awds.sort(function (a, b) {
    var aword = a.awd.toLowerCase().match(/[^ ]+/)[0];
    var bword = b.awd.toLowerCase().match(/[^ ]+/)[0];
    return aword == bword ? 0 : (aword < bword ? -1 : 1);
});
于 2013-02-11T17:45:03.020 に答える
1
var o = [
    {"awd":"adobe edge award"},
    {"awd":"besty"},
    {"awd":"c award"},
    {"awd":"awwward award"},
    {"awd":"desk award"},
    {"awd":"adobe edge award"},
    {"awd":"creative edge award"},
    {"awd":"snoogle edge award"},
    {"awd":"scuba edge award"},
    {"awd":"xidoe edge award"}
];

o.sort(function(a, b) {
    var nameA = a.awd.toLowerCase();
    var nameB = b.awd.toLowerCase(); 
    if(nameA === nameB) return 0; 
    return nameA > nameB ? 1 : -1;
});

console.log(o);

デモ

于 2013-02-11T17:50:06.207 に答える
0

最初の項目が2番目の項目より大きくないときに-1を返すと、メソッドは機能します-

   var compareNames = function(a, b) {    
    var nameA = a.awd.toLowerCase();
    var nameB = b.awd.toLowerCase();
    if(nameA==nameB) return 0;
    return (nameA > nameB)? 1:-1; 
};
于 2013-02-11T17:41:51.760 に答える