記錄一些日常的小問題(前端)

weixin_34253539發表於2018-11-28

1、多重迴圈遍歷查詢優化
開發中經常會遇到需要在一個陣列中查詢某一個物件的問題,單純用for迴圈語句迴圈查詢。(typescript)
之前寫的是這樣的

 inManual(search, manual) {
    for (let i = 0; i < search.length; i++) {
        for (let j = 0; j < manual.users.length; j++) {
            for (let k = 0; k < manual.users[j].contacts.length; k++) {
                if (search[i].phone == manual.users[j].contacts[k].phone) {
                    search[i].state = 1;
                }
            }
        }
    }
    return search;
}

無論有沒有找到,這樣做都需要全部迴圈一遍效能太浪費,需要用break來及時跳出此次迴圈。然而需要跳出多重迴圈,也就可以改變下用return
優化後的程式碼:

for (let i = 0; i < search.length; i++) {
            this.isAdd(i);
}
isAdd(i) {
    for (let j = 0; j < manual.users.length; j++) {
        for (let k = 0; k < manual.users[j].contacts.length; k++) {
            if (search[i].phone == manual.users[j].contacts[k].phone) {
                search[i].state = 1;
                return;
            }
        }
    }
}

2、ionic4中彈出元件是需要非同步操作的,但有時候需要在一個同步方法中,進行彈出,即同步方法如何有效包含非同步操作
正常的非同步操作:

async click(){
    const alert = await this.alertCtrl.create({
            header: '請輸入手機號!',
            buttons: ['確定']
        });
    await alert.present();
 }

將click方法同步後的程式碼:

click(){
    this.alertCtrl.create({
            header: '請輸入手機號!',
            buttons: ['確定']
        }).then((alert) => {
            alert.present();
        });
}

3、js物件轉換成JSON物件,使用stringfy()方法進行轉換,但在轉換過程中需要注意,會自動把js物件的屬性值為undefined的屬性去掉。
一篇寫得很好的對json物件進行講解的文章https://segmentfault.com/a/11...
4、函式是js的一等公民,即最小作用域是函式。js沒有私有成員的概念,所有物件屬性都是公有的,但有私有變數。方法:
(1)利用建構函式,訪問私有作用域中的變數。
(2)利用靜態屬性(掛載在原型上的屬性)訪問作用域中的變數。

相關文章