JS中some(),every(),forEach(),map(),filter()区分

JS在1.6中为Array新增了几个要领map(),filter(),some(),every(),forEach(),也就是一共有这么多要领了。

刚开始打仗这些倒也记得不是很清晰,在此记载一下以加深影响。我主要从两个角度来明白和影象吧,一个是API的运用,一个是内部完成。

函数简述

map():返回一个新的Array,每一个元素为挪用func的效果

filter():返回一个相符func前提的元素数组

some():返回一个boolean,推断是不是有元素是不是相符func前提

every():返回一个boolean,推断每一个元素是不是相符func前提

forEach():没有返回值,只是针对每一个元素挪用func

function my_func(item) {
  if (item == 1) {
    console.log('t');
    return true;
  }
  console.log('f');
  return false;
}

// init an array
l = [0,1,2,3,4]

// print: f,t,f,f,f
// return:[false, true, false, false, false]
l.map(my_func)


// print: f,t,f,f,f
// return: 1
l.filter(my_func)

// print: f,t
// return: true
l.some(my_func)

// print: f
// return: false
l.every(my_func)

// print: f,t,f,f,f
//return: undefined
l.forEach(my_func)
内部完成

// From:http://developer.mozilla.org

Array.prototype.map = function(fun /*, thisp*/)
{
  var len = this.length;
  if (typeof fun != "function")
    throw new TypeError();

  var res = new Array(len);
  var thisp = arguments[1];
  for (var i = 0; i < len; i++)
  {
    if (i in this)
      res[i] = fun.call(thisp, this[i], i, this);
  }

  return res;
};

Array.prototype.filter = function(fun /*, thisp*/)
{
  var len = this.length;
  if (typeof fun != "function")
    throw new TypeError();

  var res = new Array();
  var thisp = arguments[1];
  for (var i = 0; i < len; i++)
  {
    if (i in this)
    {
      var val = this[i]; // in case fun mutates this
      if (fun.call(thisp, val, i, this))
        res.push(val);
    }
  }

  return res;
};

Array.prototype.some = function(fun /*, thisp*/)
{
  var len = this.length;
  if (typeof fun != "function")
    throw new TypeError();

  var thisp = arguments[1];
  for (var i = 0; i < len; i++)
  {
    if (i in this && fun.call(thisp, this[i], i, this))
      return true;
  }

  return false;
};

Array.prototype.every = function(fun /*, thisp*/)
{
  var len = this.length;
  if (typeof fun != "function")
    throw new TypeError();

  var thisp = arguments[1];
  for (var i = 0; i < len; i++)
  {
    if (i in this && !fun.call(thisp, this[i], i, this))
    return false;
  }

  return true;
};

Array.prototype.forEach = function(fun /*, thisp*/)
{
  var len = this.length;
  if (typeof fun != "function")
    throw new TypeError();

  var thisp = arguments[1];
  for (var i = 0; i < len; i++)
  {
    if (i in this)
      fun.call(thisp, this[i], i, this);
  }
};

参考文献https://blog.csdn.net/github_…

    原文作者:强子
    原文地址: https://segmentfault.com/a/1190000017387869
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞