在處理當前元素時,不能訪問迭代的下一個元素。 一個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