手写 Lodash (3)

本文是手写 Lodash 系列的第三篇,主要介绍如何实现惰性求值。通过代码示例,作者展示了核心逻辑,帮助读者理解这一特性,并鼓励读者自己动手实践。
摘要由CSDN通过智能技术生成

手写 Lodash (3)

这里参考的是 lodash.js 4.17.21

1. 先看这次要达到的效果

var result1 = _([1,2,3,4,5])
	.map((i) => {
   console.log(i); return i + 1})
	.take(2)
	.value();
  console.log('result1: ', result1); 
  //1
  //2
  //[2, 3]

发现没有 map 里的方法只被执行了两次,
这就是我们要达到的效果:惰性求值!!!

2. 开始手写

为了能更好的表达重点,代码只写核心逻辑。
像一些错误提示,判断类型之类的这里会省略。

2.1 这是第二期的代码

function keys(value) {
   
    return Object.keys(value);
}
function map(value, fn) {
   
    var ks = keys(value);
    var values = ks.map(k => value[k]);
    return values.map(fn);
}
function take(array, takecount) {
   
    if (takecount === undefined) {
   
        return array.slice(0, 1);
    }
    else if (takecount === 0) {
   
        return [];
    }
    else if (takecount >= array.length) {
   
        return array;
    }
    else if (takecount < array.length){
   
        return array.slice(0, takecount)
    }
}

function LodashWrapper(value) {
   
    this.__wrapper__ = value;
    this.actions = []; 
}
var _ = lodash = function (value) {
   
    return new LodashWrapper(value);;
};
_.keys = keys;
_.map = map;
_.take = take;

function mixin(obj, source) {
   
    var props = Object.keys(source);
    var methodNames = props.filter((p) => {
   return typeof source[p] === 'function';});
    methodNames.forEach((n) => {
   
        var func = source[n];
        obj.prototype[n] = function () {
   
            var args = Array.</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值