一、.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(?) - 可能存在或不存在于数组中的值。
  • offset(Number) - 开始搜索前要跳过的初始项目数。

 返回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;
});
}

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

  十一、.last() →

  function last() {
return this[this.length - 1];
}

  返回数组的第一个项目(例如,array[array.lenth-1])。

   十二、.lastIndexOf(item[, offset])  →Number

  • item (?) - 可能存在或不存在于数组中的值。
  • offset (Number) - 开始搜索前在结尾跳过的项目数。

  返回最后一次出现的位置item在阵列中-或者-1,如果item没有在数组中存在。

  function lastIndexOf(item, i) {
if (this == null) throw new TypeError(); var array = Object(this), length = array.length >>> 0;
if (length === 0) return -1; if (!Object.isUndefined(i)) {
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));
}
} else {
i = length;
} //如果fromIndex为正值,则将其限制为数组中的最后一个索引;
//如果它是负数,则从数组长度中减去其绝对值。
var k = i >= 0 ? Math.min(i, length - 1) :
length - Math.abs(i); //如果他依然是负数,则它将完全绕过这个循环返回-1
for (; k >= 0; k--)
if (k in array && array[k] === item) return k;
return -1;
}

  十三、.map([iterator = Prototype.K[, context]])  →Array

  • iterator (Function) - 要应用于枚举中每个元素的迭代器函数。
  • context (Object) - this在对迭代器的调用中使用的可选对象。

  返回应用于iterator数组中每个项目的结果。如果没有提供迭代器,则将这些元素简单地复制到返回的数组中。

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

  十四、reverse([inline = true])  →Array

  • inline (Boolean) - 是否修改数组。默认为true。克隆原始数组时false。
 function reverse(inline) {
return (inline === false ? this.toArray() : this)._reverse();
}

  例子:

         // Making a copy
var nums = [3, 5, 6, 1, 20];
var rev = nums.reverse(false);
// nums -> [3, 5, 6, 1, 20]
// rev -> [20, 1, 6, 5, 3] // Working inline
var nums = [3, 5, 6, 1, 20];
nums.reverse();
// nums -> [20, 1, 6, 5, 3]

  十五、.Size()   →Number 

  function size() {
return this.length;
}

  返回数组的长度。

  十六、toArray() → Array

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

  别名 .clone()

  十七、.uniq()

  function uniq(sorted) {
return this.inject([], function(array, value, index) {
if (0 == index || (sorted ? array.last() != value : !array.include(value)))
array.push(value);
return array;
});
}
  • sorted (Boolean) - 数组是否已被排序。如果true使用成本较低的算法。

  生成一个数组的重复版本。如果没有找到重复项,则返回原始数组。

  在大型阵列时sorted是false,这种方法有一个潜在很大的性能代价。

  例子:

     [1, 3, 2, 1].uniq();
// -> [1, 2, 3]
['A', 'a'].uniq();
// -> ['A', 'a'] (because String comparison is case-sensitive)

  十八、.without(value[, value...])   → Array

  function without() {
var values = slice.call(arguments, 0);
return this.select(function(value) {
return !values.include(value);
});
}
  • value (?) - 要排除的值。

生成不包含任何指定值的数组的新版本,保持原始数组不变。

  例子:

[3, 5, 6].without(3)
// -> [5, 6]
[3, 5, 6, 20].without(20, 6)
// -> [3, 5]

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

  1. Node.js权威指南学习记录

    学习nodeJS权威指南的学习记录 导航: 1.console模块 2.全局变量 3.Buffer对象 4.事件对象 5.网络请求 6.文件操作对象 一. COMMON.js的学习.(commonJS ...

  2. 动态调试smali代码学习记录

    预备知识 DDMS Dalvik Debug Monitor Serivce,Dalvik调试监控服务,为Android SDK提供的一款拥有监控Dalvik虚拟机的调试软件,启动文件位于<An ...

  3. JS继续学习记录(一)

    JS继续学习记录(一) 总感觉自己的js code写的还算可以,但是又深知好像只知道一些皮毛,所以打算仔细记录一下js晋级学习过程,日日往复 先记录一下自己目前对js的了解吧(20180828) js ...

  4. SpringMVC学习系列-后记 结合SpringMVC和Hibernate-validator,根据后台验证规则自动生成前台的js验证代码

    在SpringMVC学习系列(6) 之 数据验证中我们已经学习了如何结合Hibernate-validator进行后台的数据合法性验证,但是通常来说后台验证只是第二道保险,为了更好的用户体验会现在前端 ...

  5. D3.js学习记录【转】【新】

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 我的three.js学习记录(一)

    在之前因为项目需要使用WebGL技术做网页应用,但是苦于自己没有接触,只是使用过OpenGL.然后接触到了thre.js这个第三方库之后我突然心情很愉快,这将节省我很多时间. 过了这个项目之后,就再也 ...

  7. 我的three.js学习记录(二)

    通过上一篇文章我的three.js学习记录(一)基本上是入门了three.js,但是这不够3D,这次我希望能把之前做的demo弄出来,然后通过例子来分析操作步骤. 1. 示例 上图是之前做的一个dem ...

  8. 我的three.js学习记录(三)

    此次的亮点不是three.js的3d部分,而是通过调用摄像头然后通过摄像头的图像变化进行简单的判断后进行一些操作.上篇中我通过简单的示例分析来学习three.js,这次是通过上一篇的一些代码来与摄像头 ...

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

    1 学习计划 1.jQuery easyUI中动态添加选项卡 2.jquery ztree插件使用 n 下载ztree n 基于标准json数据构造ztree n 基于简单json数据构造ztree( ...

随机推荐

  1. gulp工程化工具

    gulpfile.js var gulp = require('gulp'); var rename = require('gulp-rename') var pump = require('pump ...

  2. MySQL数据库学习二 MSQL安装和配置

    2.1 下载和安装MySQL软件 2.1.1 基于客户端/服务器(C/S)的数据库管理系统 服务器:MySQL数据库管理系统 客户端:操作MySQL服务器 2.1.2 MySQL的各种版本 社区版(C ...

  3. .NET Core快速入门教程 4、使用VS Code开发.NET Core控制台应用程序

    一.前言 为什么选择VS Code?VS Code 是一款跨平台的代码编辑器,想想他的哥哥VS,并是微软出品的宇宙第一IDE,那作为VS的弟弟,VS Code 也不会差,毕竟微软出品.反正ken是这么 ...

  4. Nginx出现500 Internal Server Error 错误的解决方案

    500(服务器内部错误) 服务器遇到错误,无法完成请求. 501(尚未实施) 服务器不具备完成请求的功能.例如,当服务器无法识别请求方法时,服务器可能会返回此代码. 502(错误网关) 服务器作为网关 ...

  5. Oracle修改字段类型方法小技巧

    有一个表名为tb,字段段名为name,数据类型nchar(20). 1.假设字段数据为空,则不管改为什么字段类型,可以直接执行:alter table tb modify (name nvarchar ...

  6. xpath获取下一页,兄弟结点的妙用

    第一页的情况: 第四页的情况 : 文章的链接:  http://tech.huanqiu.com/science/2018-02/11605853_4.html 从上面我们可以看到,如果仅仅用xpat ...

  7. JavaScript(第十天)【Function类型】

    在ECMAScript中,Function(函数)类型实际上是对象.每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象 ...

  8. C语言第0次作业

    一.你认为大学的学习生活.同学关系.师生应该是怎样的? (1)学习生活:首先大学的学习生活应该是充实的,尽量做到时时有事做.每天有计划的学习.生活.华尔街有一位名叫罗伊.R.纽伯格的投资大师,他每天早 ...

  9. 在Apache中运行Python WSGI应用

    我们介绍如何使用Apache模块mod_wsgi来运行Python WSGI应用. 安装mod_wsgi 我们假设你已经有了Apache和Python环境,在Linux或者Mac上,那第一步自然是安装 ...

  10. iOS中CocoaPods的安装及错误详解

    什么是CocoaPods CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为"Pods"的依赖库(这些类库必须是Coc ...