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( ...
随机推荐
- 研华ADAM 6000系列型号枚举值
public enum Adam6000Type { Non = 0, Adam6015 = 6015, Adam6017 = 6017, ...
- Lucene 4.4.0中常用的几个分词器
一.WhitespaceAnalyzer 以空格作为切词标准,不对语汇单元进行其他规范化处理.很明显这个实用英文,单词之间用空格. 二.SimpleAnalyzer 以非字母符来分割文本信息,并将语汇 ...
- java排序算法(九):归并排序
java排序算法(九):归并排序
- java必学的5种排序算法
第一种冒泡排序 第二种 选择排序 第三种.插入排序
- 基于node写了个工具,可以在线制作“sorry,为所欲为”的 GIF(开源)
SnailDev.GifMaker 一个生成gif并添加自定义字幕的工具 client 微信小程序 server nodejs + express 欢迎 star&fork 如果您有好的com ...
- Mysql 一次性备份导出/导入恢复所有数据库
有木有遇到过这种情况?电脑或者服务器需要重装系统?可是你电脑上存着n多个网站的数据库,怎么办?把数据库文件夹拷贝出来,重装系统之后再拷回去?如果你使用了InnoDB引擎,恐怕那样做会出麻烦的,一个一个 ...
- 常用排序算法的Java实现与分析
由于需要分析算法的最好时间复杂度和最坏时间复杂度,因此这篇文章中写的排序都是从小到大的升序排序. 带排序的数组为arr,arr的长度为N.时间复杂度使用TC表示,额外空间复杂度使用SC表示. 好多代码 ...
- C#/AutoCAD 2018/ObjectArx/二次开发添加删除实体的工具函数(四)
1.添加删除实体 C# ObjectARX二次开发添加删除实体是非常容易主要代码如下: 添加实体: objId = btr.AppendEntity(entity); trans.AddNewlyCr ...
- spring框架学习笔记5:SpringAOP示例
1.导包: 导入spring中的这两个包 再导入其他包(网上下载): 2.准备目标对象: package service; public class UserServiceImpl implement ...
- 如何在http请求中使用线程池(干货)
这段时间对网络爬虫比较感兴趣,实现起来实际上比较简单.无非就是http的web请求,然后对返回的html内容进行内容筛选.本文的重点不在于这里,而在于多线程做http请求.例如我要实现如下场景:我有N ...