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

你可能感兴趣的:(JavaScript数组的forEach、map和angular.forEach)