1

私はこのテキストを持っています

( ) ( ( ) ( ( ) ) ( ( ) ) )

事実上、各ブラケットはスパンであり、ネストされた構造を整理するためにこのコードを書きました:

myobj.each(function(i) { 

    var isOpen = $( this ).text( ) == '(' ? true: false;

    if( isOpen ) {
        console.log( ' open at: ' + index  )
        index++;
        closer = index;
    } else {
       closer--;
       console.log( 'close at: ' + ( closer ) );
    }

});

予想される出力が次のようになると仮定します。

0 0 1 2 2 3 4 4 3 5 6 6 5 1
( ) ( ( ) ( ( ) ) ( ( ) ) )

それは私に与えます:

0 0 1 2 2 3 4 4 3 5 6 6 5 4
( ) ( ( ) ( ( ) ) ( ( ) ) )

最後の括弧に注意してください..なぜですか?

4

1 に答える 1

1

閉じていない (開いたばかりの) ブラケットのインデックスを配列に格納し、pop閉じるときに最後の閉じていないものを取得するために使用します。

var index = -1, unclosed = [], log = [];
myobj.each(function() {
    if ($(this).text() === '(') {
        index++;
        console.log('Open at: ' + index);
        unclosed.push(index);
        log.push(index);
    } else {
        var closer = unclosed.pop();
        console.log('Closed at: ' + closer);
        log.push(closer);
    }
});
console.log(log); //[0, 0, 1, 2, 2, 3, 4, 4, 3, 5, 6, 6, 5, 1]

フィドル

上記logは最終結果を表示するためのもので、これらの 3 行 + 宣言は後で削除できます。

于 2012-12-09T22:44:27.533 に答える