数组的函数式编程

1,145 阅读1分钟

如果我们将函数式编程浓缩成一句话:那么它就是一个求值的过程。数组是我们经常要使用到的一种数据结构,利用函数式的思路,可以帮助我们减少大量的求值操作所带来的代码量。

至少它在视觉上让我很满意

求和运算


var data = [1,2,3,4];
var k;
for(var i=0;i
  if(!k){
    k = data[i]
  }else{
    k+= data[i]
  }
  }
var val = data.reduce((pre,cur)=>{
  return pre+cur
  });

利用reduce可以直接执行求和运算,比之上面的for循环要好看的多。

筛选数据再求和运算


var data = [12,2,2,3,4,5,1];
var result = [];
var k;
for(var i = 0;i
  if (data[i] === 2) {
    result.push(data[i]);
  }
  }
for(var j = 0;j
  if(!k){
    k = result[j];
  }else{
    k+= result[j];
  }
  }
var k = data.filter((v)=>{
  return v === 2
  })
.reduce((pre,cur)=>{
  return pre+cur;
  })

这里利用了返回值是数组的特性,使用链式的方式来运行筛选数据之后的求和运算。

map函数的运用

var numbers = [1,4,9];
var roots = numbers.map(Math.sqrt);

使用map方法加上sqrt可以直接求元素的平方根,如果更运用一个更复制的例子:


var words = ['wow','icepy','wow'];
var result = [];
words.forEach(function(v){
  if(v==='wow'){
    result.push(v.toUpperCase());
  }
  });
var result = words.filter((v)=>{
  return v === 'wow'
  })
.map((v)=>{
  return v.toUpperCase();
  })

浅复制一段数据

var data = [
  {
    val:1
  },
  {
    val:2
  },
  {
    val:3
  }
  ]
var result = data.slice(1);

更接近“函数式”编程风格的代码

function factorial(n){
  if (equal(n, 1)){
    return 1;
  } else {
    return mul(n, factorial(dec(n)));
  }
  }

拼接数据

var data = [
  {
    val:1
  },
  {
    val:2
  }
  ]
var result = [];
data.forEach(function(v){
  result.push('

'+v.val+'

'); }); result.join(''); var html = data.map((v)=>{ return '

'+v.val+'

'; }) .join('');

当然在数组中还有更多技巧有待我们的挖掘,你呢?

关注我们

扫二维码 或搜索 fed-talk ,关注我们的微信公众号。

分享到