使用描述性方式
//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;
})
为什么我们需要在这个例子中使用函数式编程?它以正常的描述方式工作正常。
答案 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了解有关地图,工作原理以及更多示例的详情。还有其他功能,如filter,reduce等,一旦你学习了很难在编写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个作为参数传递的不同函数(重申函数是一等公民点)。