项目中用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的值必须赋值给一个新的数组。