2

要素の順序を取得する次のコードがあります。ただし、要素の順序で配列を取得する代わりに、アルファベット順です。

function gatherTreeIds( $parent ){
    var GatheredIds = [];
    $parent.children('div.nt_row').each(function(){
        GatheredIds[ this.title ] = 'someValue';
    });
    return GatheredIds;
}

<div id="Wrap">
    <div class="nt_row" title="AAA"></div>        
    <div class="nt_row" title="CCC"></div>
    <div class="nt_row" title="BBB"></div>
</div>

これが私のjsFiddleの例です(コンソールで結果を確認してください)。['AAA','BBB','CCC']希望の代わりに私に与えます['AAA','CCC','BBB']

重要!これは再帰的になる必要があります。現時点では、問題を単純化することはできません。

4

2 に答える 2

4

配列とハッシュの 2 つの概念を混同しています。配列には順序がありますが、ハッシュには名前付きキーがありますが、単一のデータ構造に両方を含めることはできません。

配列を使用すると、次のようになります。

var GatheredIds = [];
$parent.children('div.nt_row').each(function(){
    GatheredIds.push('someValue');
});
return GatheredIds;

アイテムのタイトルを記録したい場合は、ハッシュの配列を使用できます。

var GatheredIds = [];
$parent.children('div.nt_row').each(function(){
    GatheredIds.push({value: 'someValue', title: this.title);
});
return GatheredIds;
于 2013-10-15T14:45:35.430 に答える
3

これは、タイトルをオブジェクト プロパティとして保存するために発生します。あなたの例GatheredIdsでは配列ではなく、これはオブジェクトです。

JavaScript のオブジェクトには順序がありません (PHP のマップ配列とは逆です)。順序に従う必要がある場合は、代わりに配列を使用する必要があります。

考えられる解決策の 1 つ:

function gatherTreeIds( $parent ){
    return $parent.children('div.nt_row').map(function() {
        return {
            title: this.title,
            value: 'someValue'
        };
    }).get();
}

デモ: http://jsfiddle.net/FmyBb/4/

于 2013-10-15T14:41:50.417 に答える