我有这个文字
( ) ( ( ) ( ( ) ) ( ( ) ) )
实际上每个括号都是一个span,我已经编写了这个代码来组织嵌套结构:
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
( ) ( ( ) ( ( ) ) ( ( ) ) )
注意最后一个括号..为什么?
答案 0 :(得分: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行+声明。