項目中用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的值必須賦值給一個新的數組。