JavaScript數組的forEach、map和angular.forEach

項目中用ng1.5,經常需要遍歷數組,而angular.forEach則是首選,在脫離angular以後遍歷數組的時候就想到了forEach和map,用法怪怪的。先點出情景“確保字符串的每個單詞首字母都大寫,其餘部分小寫”,即從數據顯示在頁面上的時候需轉爲首字母大寫,其餘小寫的格式。

我直接敲出的代碼是醬紫的,沒想到這麼小知識也有易錯點。

function titleCase(str) {
     var temp=str.split(" ");
      temp.forEach(function(value,index,arr){
         value= value.charAt(0).toUpperCase()+value.substring(1).toLowerCase();
       });
      return temp.join(" ");
    }
console.log(titleCase("I'm a little tea pot")); 

可是發現代碼並沒有發生變化,正確的打開方式是通過第三個參數arr和index來給它賦值

temp.forEach(function(value,index,arr){
   arr[index]= value.charAt(0).toUpperCase()+value.substring(1).toLowerCase();
  });

注意: 沒有辦法中止或者跳出 forEach 循環,除了拋出一個異常。如果你需要這樣,使用forEach()方法是錯誤的,你可以用一個簡單的循環作爲替代。如果您正在測試一個數組裏的元素是否符合某條件,且需要返回一個布爾值,那麼可使用 Array.every 或 Array.some。
angular.forEach和forEach是一個樣子,用了這麼久竟然才發現,只不過寫法不同。map寫法也可以

function titleCase(str) {
     var temp=str.split(" ");
      // temp.forEach(function(value,key,arr){
      //   arr[key]= value.charAt(0).toUpperCase()+value.substring(1).toLowerCase();
      // });

      // angular.forEach(temp,function(value,key){
      //   temp[key]= value.charAt(0).toUpperCase()+value.substring(1).toLowerCase();
      // });

     temp=temp.map(function(value,key,arr){
        return value.charAt(0).toUpperCase()+value.substring(1).toLowerCase();
      });
      return temp.join(" ");
    }
    console.log(titleCase("I'm a little tea pot"));

這裏map的時候原數組的每一項在遍歷的時候會返回它經過運算以後的值,這時候注意,原數組是不受影響的,所有return的值必須賦值給一個新的數組。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章