在处理当前元素时,不能访问迭代的下一个元素。 一个for-in
圈像for (var elem in sortedTokens) { ... }
大致等同于:
for (var it = sortedTokens.iterator; it.moveNext();) {
var elem = it.current;
...
}
正如你所看到的,移动到下一个元素moveNext
在当前元素的身体已完成时才执行。
所以,没有办法做任何你想做的事情,for-in
没有做一些变通。 for-in
针对每个元素进行了优化,而不是用于访问无序元素。
最简单的解决方法就是仅仅使用索引。如果在某些情况下实际需要向前看或后面或更快步进,则没有任何问题。
另一种变通办法可以是:
bool isProperty = false;
for (var elem in sortedTokens) {
if (isProperty) {
// check the identifier of the current element
isProperty = false;
continue;
}
if (elem.identifier == "ACCESSOR") {
//
} else if (elem.identifier == "PROPERTY") {
isProperty = true;
}
}
这只是保持状态(这里它只是一个布尔)元素之间,所以下一个元素知道你想用它做什么。 在某些情况下,这很有用也很方便(比如建立一个以逗号分隔的列表,你想要特殊情况下第一个元素不加逗号),在其他情况下,它比它的价值更麻烦,因为状态变得笨重,逻辑令人费解的。
来源
2017-05-31 10:52:32
lrn
非常有创意的方法,谢谢;) – OhMad