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();
});
}