0
var _txtString = ":un:-:un:-:deux:-:deux:-:deux:-:trois:-:trois:" ;
var _array = ["un", "deux", "trois"]  ;
var _items = new Array();

for (var t =0; t < _array.length; t++) {
    found = _txtString.match(new RegExp(':' + _array[t]+ ':', 'g'));
    _items[t] = parseInt(found.length);
    //_items.sort();
    document.write("<br />" + _items[t] + "  " + _array[t]);
}

こんにちは、このコードを実行すると、表示される結果が適切にカウントされます。

2 un
3 deux
2 trois

しかし、sort() 行のコメントを外すと、カウントが間違っています。

2 un
3 deux
3 trois <=

私が欲しかったのは、返された結果を数値でソートすることです。私の理解を超えているのは、 sort() 関数が実際の値を変更することです?! 理由は何ですか?

ありがとう

4

2 に答える 2

2

javascript の sort コマンドはインプレース ソートを実行します。つまり、配列の順序が変更されます。これが発生すると、コードが期待しているものと同期していないように見えます。

配列のコピーを作成してそのコピーを並べ替えない限り、これを回避する方法はありません。したがって、元の配列はそのままにしておきます。

于 2013-08-01T16:58:21.853 に答える
2

ソートしているため、配列の順序を変更しています。したがって、ソートすると「3」が最後のインデックスになり、それが書き出されます。

_items[t] = parseInt(found.length);  //[2,3,2]
_items.sort();  //[2,2,3]
document.write("<br />" + _items[t] + "  " + _array[t]);  //here you are reading the last index which is 3

カウントで並べ替える場合は、すべてを計算してから行う必要があります。

基本的な考え方:

var _txtString = ":un:-:un:-:deux:-:deux:-:deux:-:trois:-:trois:";
var _array = ["un", "deux", "trois"];
var _items = new Array();

for (var t = 0; t < _array.length; t++) {
    found = _txtString.match(new RegExp(':' + _array[t] + ':', 'g'));
    _items.push({
        count: found.length,
        text: _array[t]
    });
}

_items.sort(function (a, b) {
    return a.count - b.count;
});

for (var i = 0; i < _items.length; i++) {
    console.log(_items[i].count, _items[i].text);
}
于 2013-08-01T16:57:49.203 に答える