JavaScript常見集合操作
集合的遍歷
FOR循環(效率最高)
- 優點:JavaScript最普遍的for循環,執行效率最高
- 缺點:無法遍歷對象
for(let i=0;i<array.length,i++){ //operation }
FOR…IN循環(效率較低)
- 優點:唯一一個能夠獲取對象的屬性名的遍歷方式
- 缺點:會將對象通過繼承得到的屬性一齊遍歷,造成非預料的結果且效率較低
//會訪問非繼承的屬性 for(attr in object){//attr作為屬性名 //object[attr]訪問值 }
//避免訪問繼承的屬性 for(attr in object){//attr作為屬性名 if(object.hasOwnProperty(attr)){ //object[attr]訪問值 } }
FOR…OF循環(效率較高)
- 優點:能夠快速訪問非繼承屬性值
- 缺點:需要ES6支持
for(item of object){ //item訪問值 }
FOREACH方法(數組內置高階方法,含義清晰)
- 優點:函數式編程,簡潔,快速領會代碼含義
- 缺點:無法對對象使用
array.forEach(function(item,index,array)){ //item為值 //index為索引 //array為被訪問數組 };
TIPS:
- 在對對象進行遍歷時,如不需要訪問屬性名選擇
for...of循環,如需訪問屬性名選擇for...in循環 - 在對數組進行訪問時,使用
forEach得到較好的可讀性,傳統的for循環能夠帶來很高的性能及拓展性
集合的操作
提倡的想機器一樣思考中,編程問題的解決被分為了輸入,處理和輸出
處理,是對輸入數據的處理,就可以分為從輸入的數據中提煉出一定的有價值的數據,並對他們做出一些操作,得到希望得到的有價值的東西,並將他輸出
MAP映射
Map映射是將輸入的數據中有價值的東西提取出來,轉化為更有利於處理的格式
let dataAfterProcess = array.map(function(item,index,array){ //item為值 //index為索引 //array為被訪問數組 return ;//返回dataAfterProcess中希望被添加的元素 });
REDUCE計算
Reduce計算以提取好的數據輸入,並獲得最終的一個結果
let output = array.reduce(function(accumulator, currentValue, currentIndex, array){ //accumulator為輸出結果 //currentValue為遍歷數組目前的值 //currentIndex為遍歷數組目前的索引 //array為被訪問數組 return ;//返回希望累加的操作 },0);//0為計算結果的初始值,默認為數組第一個元素
TODO
在完成JS練習中,我時常會遇到以下問題待解決:
- 在
Map操作中,經常會遇到需要根據已有的目標數組的情況做出相應的映射操作,但目前尚未發現怎樣在Map循環中檢查已映射的目標數組? - 為對象實現接口使對象也具有
MapReduce操作的能力
