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( ...
随机推荐
- 【Python&数据结构】 抽象数据类型 Python类机制和异常
这篇是<数据结构与算法Python语言描述>的笔记,但是大头在Python类机制和面向对象编程的说明上面.我也不知道该放什么分类了..总之之前也没怎么认真接触过基于类而不是独立函数的Pyt ...
- mariadb插入中文数据乱码解决过程
基本情况: 系统:centos 7 mariadb安装方式:yum 乱码解决过程: 查看当前数据库编码(登录数据库后) # show variables like 'character%'; (上图为 ...
- 四十六、android中的Bitmap
四十六.android中的Bitmap: http://www.cnblogs.com/linjiqin/archive/2011/12/28/2304940.html 四十七.实现调用Android ...
- 福州大学W班-团队作业-随堂小测(同学录)成绩
作业链接 https://edu.cnblogs.com/campus/fzu/FZUSoftwareEngineering1715W/homework/1246 作业要求 1.题目 即编写一个能够记 ...
- 福州大学软工1715|W班-启航
新的一学期即将开启,而在仅剩的几天的时间内,我将为接下来的软工实践助教事宜忙碌起来.要学习的东西很多,要关注的东西也很多. 虽然我现在还在茫然阶段,虽然我对<构建之法>还不太熟悉,但是,我 ...
- LeetCode---Container With Most Water(11)
Description: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordin ...
- c语言博客第二次作业
一.PTA实验作业 题目1:计算分段函数[2] 1.实验代码 { double x,y; scanf("%lf",&x); if(x>=0) { y=pow(x,0. ...
- 亚马逊AWS学习——EC2的自定义VPC配置
1 网络配置 EC2即亚马逊AWS云服务中的虚拟主机.创建EC2实例时如果使用的默认VPC并分配了公有IP是可以上网的.但我们经常需要自定义的网络环境,这时就需要自己定义VPC和子网了. 1.1 配置 ...
- bzoj 2962 序列操作
2962: 序列操作 Time Limit: 50 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 有一个长度为n的序列, ...
- installutil 安装windows service
1:路径:C:\Windows\Microsoft.NET\Framework\v4.0.30319 2:执行指令:C:\Windows\Microsoft.NET\Framework\v4.0.30 ...