Array方面Js底层代码学习记录

一、.clear() →Array

function clear() {
            this.length = 0;
            return this;
        }

  返回清除item的空数组。

  例子:

var fruits = [‘Apple‘, ‘Orange‘, ‘Bananas‘, ‘peach‘];
fruits.clear();
// -> []
fruits
// -> []

  

二、.clone() →Array

  function clone() {
    return slice.call(this, 0);
  }

  返回数组的副本,保持原始数组不变。

三、.compact() →Array

  function compact() {
    return this.select(function(value) {
      return value != null;
    });
  }

  返回一个副本,不包含null和undefined

  例子:

var orig = [undefined, ‘A‘, undefined, ‘B‘, null, ‘C‘];
var copy = orig.compact();
// orig -> [undefined, ‘A‘, undefined, ‘B‘, null, ‘C‘];
// copy -> [‘A‘, ‘B‘, ‘C‘];

  四、Every([iterator = Prototype.K[, context]]) → Boolean

  • iterator (Function) - 一个可选函数,用于评估枚举中的每个元素; 该函数应该返回值来测试。如果没有提供,则测试元素本身。
  • context (Object) - this在对迭代器的调用中使用的可选对象。

  确定是否所有元素都是真实的(boolean-equivalent true),直接或通过提供的迭代器计算。(这一块我还不能很好理解)

 function every(iterator) {
    if (this == null) throw new TypeError();
    iterator = iterator || Prototype.K;
    var context = arguments[1];
    var object = Object(this);
    for (var i = 0, length = object.length >>> 0; i < length; i++) {
      if (i in object && !iterator.call(context, object[i], i, object)) {
        return false;
      }
    }
    return true;
  }
  if (arrayProto.every) {
    every = wrapNative(Array.prototype.every);
  }

  五、.filter(iterator[, context]) →Array

  • iterator (Function) - 用于测试元素的迭代器函数。
  • context (Object) - this在对迭代器的调用中使用的可选对象。

  返回包含此数组中所有项目的新数组,其中 iterator返回了一个真值。

 function filter(iterator) {
    if (this == null || !Object.isFunction(iterator))
      throw new TypeError();

    var object = Object(this);
    var results = [], context = arguments[1], value;

    for (var i = 0, length = object.length >>> 0; i < length; i++) {
      if (i in object) {
        value = object[i];
        if (iterator.call(context, value, i, object)) {
          results.push(value);
        }
      }
    }
    return results;
  }

  if (arrayProto.filter) {
    // `Array#filter` requires an iterator by nature, so we don‘t need to
    // wrap it.
    filter = Array.prototype.filter;
  }

  六、.first()

  function first() {
    return this[0];
  }

  返回数组的第一个项目(例如,array[0])。

  七、.flatten()  →Array

function flatten() {
    return this.inject([], function(array, value) {
      if (Object.isArray(value))
        return array.concat(value.flatten());
      array.push(value);
      return array;
    });
  }

  个人理解:合并指定数组内的所有数组。

  官方理解:

  返回数组的平坦(一维)副本,保持原始数组不变。嵌套数组以递归方式内联注入。

  常用在处理递归收集算法的结果。

  例子:

var a = [ ‘ frank ‘,[ ‘ bob ‘,‘ lisa ‘ ],[ ‘ jill ‘,[ ‘ tom ‘,‘ sally ‘ ]]];
var b = a.flatten();
// a  - > [‘frank‘,[‘bob‘,‘lisa‘],[‘jill‘,[‘tom‘,‘sally‘]]]
// b  - > [‘frank‘,‘bob‘, ‘lisa‘,‘jill‘,‘tom‘,‘sally‘]

  八、.indexOf(item[, offser = 0]) →Number

 function indexOf(item, i) {
    if (this == null) throw new TypeError();

    var array = Object(this), length = array.length >>> 0;
    if (length === 0) return -1;

    // The rules for the `fromIndex` argument are tricky. Let‘s follow the
    // spec line-by-line.
    i = Number(i);
    if (isNaN(i)) {
      i = 0;
    } else if (i !== 0 && isFinite(i)) {
      // Equivalent to ES5‘s `ToInteger` operation.
      i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i));
    }

    // If the search index is greater than the length of the array,
    // return -1.
    if (i > length) return -1;

    // If the search index is negative, take its absolute value, subtract it
    // from the length, and make that the new search index. If it‘s still
    // negative, make it 0.
    var k = i >= 0 ? i : Math.max(length - Math.abs(i), 0);
    for (; k < length; k++)
      if (k in array && array[k] === item) return k;
    return -1;
  }

  官方理解:

  • item?) - 可能存在或不存在于数组中的值。
  • offsetNumber) - 开始搜索前要跳过的初始项目数。

 返回item数组中第一次出现的索引,或者-1如果item不存在于数组中。Array#indexOf使用绝对等于(===)比较项目。

  个人理解:返回item在数组中首次出现的位置的索引,因为区分了使用了绝对等于所以区分大小写,类型。

  例子:

[3, 5, 6, 1, 20].indexOf(1)
// -> 3
 [3, 5, 6, 1, 20].indexOf(90)
// -> -1 (not found)
 [‘1‘, ‘2‘, ‘3‘].indexOf(1);
// -> -1 (not found, 1 !== ‘1‘)

  加一个不是Array的例子:

var str="Hello world!"
document.write(str.indexOf("Hello") + "<br />")
document.write(str.indexOf("World") + "<br />")
document.write(str.indexOf("world"))
// ->0
// ->-1
// ->6

  九、.inspect() →String

function inspect() {
    return ‘[‘ + this.map(Object.inspect).join(‘, ‘) + ‘]‘;
  }

  返回数组的面向调试的字符串表示形式。

  例子:

[‘Apples‘, {good: ‘yes‘, bad: ‘no‘}, 3, 34].inspect()
// -> "[‘Apples‘, [object Object], 3, 34]"

  十、.intersect(array) →Array

  function intersect(array) {
    return this.uniq().findAll(function(item) {
      return array.indexOf(item) !== -1;
    });
  }

  返回包含在两个给定数组之间相同的每个项目的数组。

原文地址:https://www.cnblogs.com/xuxml/p/8466011.html

时间: 2024-11-26 01:50:39

Array方面Js底层代码学习记录的相关文章

js面向对象的学习记录

1.函数之前加了new会变成对象,this的引用发生变化. function show() { alert(this); } window.onload=function(){ var btn1=document.getElementById('btn1'); btn1.onclick=show; } show(); //window new show(); //新创建的对象 2.原型继承 prototype 这个有的说,之前粗略的看了JavaScript设计模式的时候就说了继承的两种方式. 上

如鹏网HTML代码学习记录

HTML常用标签--字体 字体标签 <font> 例:<font color="red">HTML字体标签</font>,常见属性size color,还有其它属性,比如:face 标题标签 <H1></H1>...<H6></H6> 特殊字符 如果要在网页上显示一些特殊符号,比如< > & 等.因为这些符号在代码中会被浏览器识别并解释,所以用一些特殊的方式来表示. < <

js去整学习记录

1.parseInt() //丢弃小数部分: 2.Math.ceil() //向上去整(遇到小数丢弃小数,整数部分向上加一): 3.Math.round()  //四舍五入: 4.Math.floor() //向下去整: 一些学习笔记,记录自己学习的点击,菜鸟就这样成长的,看到的行内大牛,希望得到你们的指导.

openssl代码学习记录-SSL

通过Source Insight查看openssl的源代码,可发现SSL建立的来龙去脉. 1.    先看SSL_NEW. static int ssl_new(BIO *bi) { BIO_SSL *bs; bs = (BIO_SSL *)OPENSSL_malloc(sizeof(BIO_SSL)); if (bs == NULL) { BIOerr(BIO_F_SSL_NEW, ERR_R_MALLOC_FAILURE); return (0); } memset(bs, 0, sizeo

Node.js Windows系统学习记录 -- 01用法

1.安装Node 在我之前的文章Windows系统下安装fis3中提到过怎么安装Node 2.打开cmd输入: mkdir %USERPROFILE%\projects cd %USERPROFILE%\projects 3.创建一个js脚本 hello-world.js const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((

JS继续学习记录(一)

JS继续学习记录(一) 总感觉自己的js code写的还算可以,但是又深知好像只知道一些皮毛,所以打算仔细记录一下js晋级学习过程,日日往复 先记录一下自己目前对js的了解吧(20180828) js作为脚本语言,包括核心语法,dom,bom三部分组成. 1.核心语法:变量,函数的定义,一些js内置对象的调用,如array,如json,基本数据类型,引用数据类型若干,各自的用法云云. 2.dom对象:html的页面对象的封装,封装成的dom对象内包括html的基础属性,衍生属性,监听器,绑定函数

JAVAEE——BOS物流项目02:学习计划、动态添加选项卡、ztree、项目底层代码构建

1 学习计划 1.jQuery easyUI中动态添加选项卡 2.jquery ztree插件使用 n 下载ztree n 基于标准json数据构造ztree n 基于简单json数据构造ztree(重点) 3.数据库建模工具PowerDesigner使用方式 4.myeclipse翻转引擎插件使用(了解) 5.项目底层代码构建(重点) n 持久层代码抽取 n 表现层代码抽取 6.实现BOS项目登录和注销功能 2 jQuery easyUI中动态添加选项卡 l 用于动态添加一个选项卡 l 选中指

TP框架代码学习 学习记录 3.2.3

文件:think.class.php PHP提供register_shutdown_function()这个函数,能够在脚本终止前回调注册的函数,也就是当 PHP 程序执行完成后执行的函数.register_shutdown_function 执行机制是:PHP把要调用的函数调入内存.当页面所有PHP语句都执行完成时,再调用此 函数.注意,在这个时候从内存中调用,不是从PHP页面中调用,所以上面的例子不能使用相对路径,因为PHP已经当原来的页面不存在了.就没有什么相对路 径可言.注意:regis

Vue.js 2.0 学习重点记录

Vue.js兼容性 Vue.js.js 不支持 IE8 及其以下版本,因为 Vue.js.js 使用了 IE8 不能模拟的 ECMAScript 5 特性. Vue.js.js 支持所有兼容 ECMAScript 5 的浏览器. Vue.js安装 安装方式有两种: 1.直接下载用script标签引入(推荐引入开发版本,压缩版本会失去错误提示和警告) 2.使用cdn方法引入 3.npm安装 npm安装的前提需要安装了nodejs,这里推荐nvm安装nodejs 附上一小段nvm使用的命令: $ n