forEach、reduce、map、filter、every、some、parse、stringify的实现与区别

<script type= "text/javascript" >
     // 函数式编程:
     // 描述我们要做什么,而不是我们如何去做。这意味着我们工作在一个更高的抽象层次。函数式编程将导致更精巧、清晰和令人愉快的代码。
 
     // 最基础的forEach
     function forEach(array, action) {
         for ( var i = 0; i < array.length; i++) {
             action(array[i]);
         }
     }
 
     // 测试forEach
     forEach([ "Pear" , "Apple" ], function (name) {
         console.log(name);
     });
 
     // ------------------------------------------------ //
     // 实现reduce
     function reduce(combine, base, array) {
         forEach(array, function (element) {
             base = combine(base, element);
         });
         return base;
     }
 
     // 使用reduce实例1:计算数组中的0的个数
     function countZeros(array) {
         function counter(total, elem) {
             return total + (elem == 0 ? 1 : 0);
         }
 
         return reduce(counter, 0, array);
     }
 
     alert( "countZeros by reduce: " + countZeros([1, 3, 0, 4, 7, 0]));
 
     // 使用reduce实例2:求和
     function sum(array) {
         function add(a, b) {
             return a + b;
         }
 
         return reduce(add, 0, array);
     }
 
     alert( "sum by reduce: " + sum([1, 2, 3, 5]));
 
 
     // ------------------------------------------------ //
 
     // 实现map
     function map(func, array) {
         var result = [];
         forEach(array, function (elem) {
             result.push(func(elem));
             // 对于map,func函数一般只有一个参数,所以用func(elem)
         });
 
         return result;
     }
 
     // 利用map实现数组的每个数字翻倍
     var array = [1, 2, 3, 4, 5];
     var mappedArray = map( function (elem) {
         return elem * 2;
     }, array);
     console.log(mappedArray);
 
     // 利用map实现数组向下取整
     var array2 = [1.3, 4.5, 6.7, 8, 9.2];
     var mappedArray2 = map(Math.floor, array2);
     console.log(mappedArray2);
 
 
     // ------------------------------------------------ //
     
     // 实现filter:我自己根据上面两个补充实现的
     function filter(func, array) {
         var result = [];
         forEach(array, function (elem) {
             if (func(elem))
                 result.push(elem);
         });
         
         return result;
     }
     
     // 使用filter过滤出偶数
     function isEven(elem) {
         return elem % 2 == 0;
     }
     var array3 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
     var filterArray = filter(isEven, array3);
     console.log(filterArray);
     
  //使用every
  

  function isBigEnough(element, index, array) {  

    return (element >= 10);

  }

    var passed = [12, 5, 8, 130, 44].every(isBigEnough); // passed is false

    passed = [12, 54, 18, 130, 44].every(isBigEnough); // passed is true

 

   //使用some

  function isBigEnough(element, index, array) {
   return (element >= 10);
  }
  var passed = [2, 5, 8, 1, 4].some(isBigEnough);
  // passed is false
  passed = [12, 5, 8, 1, 4].some(isBigEnough);
  // passed is true

 

  //使用parse

  var d = Date.parse("Jul 8, 2005")
  document.write(d);//1120752000000

  取得从 1970/01/01 到 2005/07/08 的毫秒数

 

  //使用stringify

  

  var student = new Object();

  student.name = "Lanny";

  student.age = "25";

  student.location = "China";

  var json = JSON.stringify(student);

  console.log(json);

//{"name":"Lanny","age":"25","location":"China"}
</script>
 
链接地址:http://www.oschina.net/code/piece_full?code=16208&piece=26735#26735

你可能感兴趣的:(stringify)