美文网首页
Array操作符手写实现

Array操作符手写实现

作者: 琢磨先生lf | 来源:发表于2019-06-14 13:07 被阅读0次

    注意:不能使用箭头函数

    some

    使用示例

    const arr = [1,2,3,4];
    arr.some(item => item === 0); // false
    arr.some(item => item === 1); // true
    
    Array.prototype._some = function(cb) {
      let res = false;
      for (let i=0; i<this.length; i++) {
        res = cb(this[i]);
        if (res) return true;
      }
      return res;
    }
    

    every

    Array.prototype._every = function(cb) {
      let res = true;
      for (let i=0; i<this.length; i++) {
        res = cb(this[i]);
        if (!res) return false;
      }
      return res;
    }
    

    find

    使用示例

    const characters = [
      { id: 1, name: 'ironman' },
      { id: 2, name: 'black_widow' },
      { id: 3, name: 'captain_america' },
      { id: 4, name: 'captain_america' },
    ];
    function getCharacter(name) {
      return character => character.name === name;
    }
    const res = characters._find(getCharacter('captain_america'));
    // {id: 4, name: "captain_america"}
    

    Array.prototype._find = function(cb) {
      let res;
      for (let i=0; i<this.length; i++) {
        const item = this[i];
        if (cb(item)) {
          res = item;
        }
      }
      return res;
    }
    

    filter

    使用示例

    const fArr = characters._filter(item => {
      return item.id > 1;
    });
    // [ {id: 3, name: "captain_america"}, {id: 4, name: "captain_america"}]
    

    Array.prototype._filter = function(cb) {
      const resArr = [];
      for (let i=0; i<this.length; i++) {
        const item = this[i];
        if (cb(item)) {
          resArr.push(item);
        }
      }
      return resArr;
    }
    

    reduce

    使用示例

    const arr = [1,2,3,4];
    arr.reduce((result, cur) => {
      console.log(result);
      return cur;
    }, 0);
    // 0 1 2 3 4
    
    Array.prototype._reduce = function (callback, initVal) {
      let i = 0
      let result = initVal
      if (initVal === undefined || initVal === null) {
        result = this[0]
        i++
      }
      for (i; i < this.length; i++) {
        result = callback(result, this[i])
      }
      return result
    }
    
    // 测试
    const arr = [1, 2, 3]
    let result = arr._reduce((a, b) => {
      return a + b
    }, 0)
    console.log(result) // 6
    

    相关文章

      网友评论

          本文标题:Array操作符手写实现

          本文链接:https://www.haomeiwen.com/subject/pzbufctx.html