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
(?
) - 可能存在或不存在于数组中的值。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底层代码学习记录的更多相关文章
- Node.js权威指南学习记录
学习nodeJS权威指南的学习记录 导航: 1.console模块 2.全局变量 3.Buffer对象 4.事件对象 5.网络请求 6.文件操作对象 一. COMMON.js的学习.(commonJS ...
- 动态调试smali代码学习记录
预备知识 DDMS Dalvik Debug Monitor Serivce,Dalvik调试监控服务,为Android SDK提供的一款拥有监控Dalvik虚拟机的调试软件,启动文件位于<An ...
- JS继续学习记录(一)
JS继续学习记录(一) 总感觉自己的js code写的还算可以,但是又深知好像只知道一些皮毛,所以打算仔细记录一下js晋级学习过程,日日往复 先记录一下自己目前对js的了解吧(20180828) js ...
- SpringMVC学习系列-后记 结合SpringMVC和Hibernate-validator,根据后台验证规则自动生成前台的js验证代码
在SpringMVC学习系列(6) 之 数据验证中我们已经学习了如何结合Hibernate-validator进行后台的数据合法性验证,但是通常来说后台验证只是第二道保险,为了更好的用户体验会现在前端 ...
- D3.js学习记录【转】【新】
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 我的three.js学习记录(一)
在之前因为项目需要使用WebGL技术做网页应用,但是苦于自己没有接触,只是使用过OpenGL.然后接触到了thre.js这个第三方库之后我突然心情很愉快,这将节省我很多时间. 过了这个项目之后,就再也 ...
- 我的three.js学习记录(二)
通过上一篇文章我的three.js学习记录(一)基本上是入门了three.js,但是这不够3D,这次我希望能把之前做的demo弄出来,然后通过例子来分析操作步骤. 1. 示例 上图是之前做的一个dem ...
- 我的three.js学习记录(三)
此次的亮点不是three.js的3d部分,而是通过调用摄像头然后通过摄像头的图像变化进行简单的判断后进行一些操作.上篇中我通过简单的示例分析来学习three.js,这次是通过上一篇的一些代码来与摄像头 ...
- JAVAEE——BOS物流项目02:学习计划、动态添加选项卡、ztree、项目底层代码构建
1 学习计划 1.jQuery easyUI中动态添加选项卡 2.jquery ztree插件使用 n 下载ztree n 基于标准json数据构造ztree n 基于简单json数据构造ztree( ...
随机推荐
- 笔记:Struts2 输入校验
Struts2的输入校验包含了客户端校验和服务器端校验,通过编写校验规则文件来实现输入校验,需要增加 Convention 插件,将 struts2-convention-plugin-2.3.31. ...
- 兄弟连学Python-3Python变量和数据类型
变量:变量就是可以改变的量.如:x+y = 10 x=5 , y=? x=7 , y=? 这是数学里的变量 通俗的理解:变量 = 生活中的容器(盒子) 变量的赋值操作 = 我们把物品放 ...
- Spring事务管理—aop:pointcut expression解析(转)
本文转载自: http://hane00.blog.163.com/blog/static/160061522011427473965/ 先来看看这个spring的配置文件的配置: <!-- 事 ...
- WPF笔记1 用VS2015创建WPF程序
使用WPF创建第一个应用程序.实现功能如下: 单击"Red"按钮,文本显示红色:单击"Black"按钮,文本显示黑色:单击"Back"按钮, ...
- 涉及模式之 装饰器模式详解(与IO不解的情缘)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. LZ到目前已经写了九个设计模 ...
- 如何从RxJava升级到RxJava2
如何从RxJava升级到RxJava2. RxJava2已经推出有一年半的时间,由于之前RxJava已经在现有项目中广泛使用,而RxJava2在除了很多命名外并没有太多革新,所以相信有很多人跟我一样都 ...
- Leetcode 15——3Sum
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...
- 利用jmeter做一个简单的性能测试并进行参数化设置
1.新增一个线程组,并在下面添加基本原件,包括:监听器.http请求默认值和一个事务控制器 在http请求默认值中填写 ip 地址和端口号,协议类型默认为http 2.添加代理服务器,以便之后进行录制 ...
- 第1次作业:这是我的一个响亮的标题X!
1.我是回答问题的部分 part 1: 从小学开始,我就觉得写作文是一件很痛苦的事情.(痛苦ing) 所以呢,选择工科好像就是理所当然的. 至于为什么选择计算机,主要原因就是不知道应该选什么,正好看到 ...
- 201621123057 《Java程序设计》第2周学习总结
一.本周学习总结 基本数据类型 char实质属于整型.boolean类型取值只有true和false两种. 引用数据类型 包装类:自动装箱 与 自动拆箱 数组:一维数组遍历数组用foreach循环:多 ...