提示💡

可以按流程处理数据。

return dataList
      .filter(item => item.status === 'fulfilled')
      .map(item => item.value)
      .reduce((pre, cur) => {
        // 为路由添加lefturl用于区分不同游戏
        const left = cur.res.data.left.map(item => ({...item, lefturl: cur.lefturl}));
        return pre.concat(left);
      }, []);

链式操作的结构

  • 链式对象:能够进行链式操作的对象
  • 链式方法:链式对象上能进行链式操作的方法
  • 链式数据:链式操作最终想要获得结果是通过被操作数据

链式对象

原理:在构造函数中创建方法时,return this 返回当前调用方法的对象,可以实现链式调用方法。

let f = {
  name: 'dell',
  sayHi: function () {
    console.log(`hello, my name is ${this.name}`)
    return this
  },
  sayBye: function () {
    console.log(`byebye~~~~`)
    return this
  }
}
f.sayHi().sayBye()

链式方法

function numsChain(num){
    var nums = num;
    function chain(num){
        nums = `${nums} -> ${num}`;
        return chain;
    }
    chain.get = () => nums;
    return chain;
}
var des = numsChain(1)(2)(3).get();
console.log(des); // 1 -> 2 -> 3

链式数据

var pipe = function (value) {
  var funcStack = [];
  var oproxy = new Proxy({} , {
    get : function (pipeObject, fnName) {
      if (fnName === 'get') {
        return funcStack.reduce(function (val, fn) {
          return fn(val);
        },value);
      }
      funcStack.push(window[fnName]);
      return oproxy;
    }
  });
 
  return oproxy;
}
 
var double = n => n * 2;
var pow    = n => n * n;
var reverseInt = n => n.toString().split("").reverse().join("") | 0;
 
pipe(3).double.pow.reverseInt.get; // 63

上面代码设置 Proxy 以后,达到了将函数名链式使用的效果。

扩展阅读