List data = [1, 2, 3];
data.forEach((value) {
if (value == 2) {
// how to stop?
}
print(value);
});
我試過return false;
它在jQuery中工作,但它不適用於Dart。 有沒有辦法做到這一點?如何停止Dart的.forEach()?
List data = [1, 2, 3];
data.forEach((value) {
if (value == 2) {
// how to stop?
}
print(value);
});
我試過return false;
它在jQuery中工作,但它不適用於Dart。 有沒有辦法做到這一點?如何停止Dart的.forEach()?
您也可以使用for /中,其中隱含使用在對方的回答恰如其分地證明迭代器:
List data = [1,2,3];
for(final i in data){
print('$i');
if (i == 2){
break;
}
}
下面的「takeWhile()」解決方案利用了對Dart的更新更改,對於大多數情況來說,這可能是更好的解決方案。 –
forEach所需的回調函數將返回void,因此沒有機制來停止迭代。
在這種情況下,你應該使用迭代器:
void listIteration() {
List data = [1,2,3];
Iterator i = data.iterator();
while (i.hasNext()) {
var e = i.next();
print('$e');
if (e == 2) {
break;
}
}
}
飛鏢呢不支持非本地回報,所以從回調中返回不會破壞循環。 它在jQuery中工作的原因是each()檢查回調返回的值。 Dart forEach回調返回void。
打破一個List
List<int> example = [ 1, 2, 3 ];
for (int value in example) {
if (value == 2) {
break;
}
}
打破一個Map
如果你和一個Map
打交道,你不能簡單地從給定圖的迭代器,但你可以仍然使用for
將其應用於值或鍵。既然你有時可能需要兩個鍵和值的組合,這裏有一個例子:
Map<String, int> example = { 'A': 1, 'B': 2, 'C': 3 };
for (String key in example.keys) {
if (example[key] == 2 && key == 'B') {
break;
}
}
注意,一個地圖不一定他們鍵作爲[ 'A', 'B', 'C' ]
使用LinkedHashMap中,如果你想要的。如果你只是想要的值,只是做example.values
而不是example.keys
。
或者,如果你只是尋找一個元素,可以簡化一切:
List<int> example = [ 1, 2, 3 ];
int matched = example.firstMatching((e) => e == 2, orElse:() => null);
也可以實施及如何使用foreach()和takeWhile()的例子。
var data = [1, 2, 3];
data.takeWhile((val) => val != 2).forEach(print);
.takeWhile()不在我發佈原始答案時。我想說現在對大多數情況來說,這是一種更合適和優雅的方法。 –
「不起作用」是什麼意思?它實際上做了什麼? –
它什麼也沒做。 – Leksat
當你說這在JavaScript中有效時,你的意思是像jQuery這樣的庫嗎?我問,因爲它看起來像這裏概述的算法不會返回false值:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach 考慮提交一個錯誤,如果你想要這個功能。 –