JavaScript中foreach

qq_43482345發表於2020-12-07

java8 foreach無法使用break,continue,使用return跳過當前迴圈

使用foreach()處理集合時不能使用break和continue這兩個方法,也就是說不能按照普通的for迴圈遍歷集合時那樣根據條件來中止遍歷,而如果要實現在普通for迴圈中的效果時,可以使用return來達到,也就是說如果你在一個方法的lambda表示式中使用return時,這個方法是不會返回的,而只是執行下一次遍歷

// An highlighted block
public void t1(){
    List<String> list = Collections.EMPTY_LIST;
    list = Arrays.asList("awg","weg","wweg","wegwe");
    list.forEach(System.out::println);
    list.forEach(str -> {
        if("awg".equals(str)){
            return;
        }
        System.out.println(str);
    });
}

//結果
awg
weg
wweg
wegwe
weg
wweg

wegwe

我們先用常規的方法去重寫forEach()

// 這裡用const來定義函式,主要是為了防止當我們在開發時,如果別人用了這個名字重新給myForEach賦值時就會報錯,這樣就避免我們寫的方法會被別人意外覆蓋
const myForEach = function(arr, fn){
let i
for(i=0; i<arr.length; i++){
fn(arr[i], i)
}
}
方法已經寫好下面我們來測試一下新forEach()

這裡是不是和上面用forEach()的輸出完全一致啊

但是呼叫方法和上面並不一樣,那我們怎麼把他封裝到Array物件裡去呢

這樣就要用到js裡的原型鏈prototype,其實Javascript中所有的物件都是Object的例項,並繼承Object.prototype的屬性和方法

還是直接看程式碼吧↓

Array.prototype.newForEach = function(fn) {
let i
for(i=0; i<this.length; i++){
fn(this[i], i)
}
}

相關文章