在这个例子中使用函数式编程有什么好处?我用过JavaScript

时间:2018-03-11 07:35:08

标签: javascript functional-programming

使用描述性方式

    //Declare variables

    var arr1 = [1,2,3];
            arr2 = [];

  //Immediate Invoked Functions      
(function(){
        for(var i = 0 ; i<arr1.length ; i++){
            arr2.push(3 * arr1[i]);
        }

    //logging the values

    console.log(arr2);
        console.log(arr1);

        })();

使用功能编程和头等功能

//Declare variables

    var arr1 = [1,2,3];

//creating a function to push values  

function mapEachArrayValue(arr,fn){

        var newArr=[];

        for(var i=0; i<3 ; i++){

        newArr.push(fn(arr1[i]));

        }
        return newArr;

    }
    var arr2 = mapEachArrayValue(arr1,function(item){
        return 3 * item;
    })

为什么我们需要在这个例子中使用函数式编程?它以正常的描述方式工作正常。

1 个答案:

答案 0 :(得分:2)

你做错了。您可以使用内置的地图功能缩短此时间。例如,

let arr1 = [1, 2, 3]
let arr2 = arr1.map(item => item * 3)
console.log(arr2) // [3, 6, 9]

这更加简洁。这不使用任何外部迭代器。这也不会改变原始数组(尽管你也不会在你的例子中改变它)。如果你知道地图是什么,这更具可读性。

这就是地图的工作原理:你在map上调用Array并传递一个函数。这是第一类功能进入画面的地方。你将它传递给另一个功能。 Map基本上采用此函数和数组,并在数组中的每个条目上调用此函数。函数返回的值存储在相应索引的另一个数组中,这个新构造的数组由map返回。

前往MDN Docs了解有关地图,工作原理以及更多示例的详情。还有其他功能,如filterreduce等,一旦你学习了很难在编写JS时不使用。阅读这三个函数的所有示例,并尝试在编码时应用它们。

我只是把这段代码放在这里,这样你就可以看到一旦你理解了它们的语法和它们的作用,使用这些函数是多么简洁和富有表现力。

let myArr = [1,2,3,4,5,6,7,8,9]
let sumOfDoubleOfOddNumbers = myArr.filter(num => num % 2)
                                   .map(num => num * 2)
                                   .reduce((acc, currVal) => acc + currVal, 0);

首先,我们筛选出所有未通过测试的数字。然后我们将所有这些过滤的数字加倍最后使用reducer和起始值我们将此数组减少到最终值。在这个过程中,我们使用了3个作为参数传递的不同函数(重申函数是一等公民点)。