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 ) );
    }

});

假设 expeted 输出为:

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 回答