JavaScript Array
1、常用方法
// 数组构造
var a = new Array(20); // 长度为20的数组
var b = new Array('red', 'blue', 'white');
var c = ['red', 'blue', 'white']; // 推荐
var d = [];
// length 不是只读,能改变数组长度
var e = [1, 2, 3];
e.length = 1;
console.log(e); // [1]
// 转换方法
var f = ['red', 'blue', 'white'];
console.log(f.toString()); // "red,blue,white"
console.log(f.valueOf()); // ["red", "blue", "white"]
console.log(f.join('|')); // "red|blue|white"
// 栈、队列
var a = [];
var count = a.push(1, 2); // 2 在数组最后推入2项
var b = a.pop(); // 2 取得最后一项并删除其在数组中的位置
var c = a.shift(); // 1 取得第一项并删除其在数组中的位置
var count = a.unshift(1, 2, 3); // 3 在数组开头推入3项
// 排序、翻转
var a = [1, 2, 3, 4, 5];
a.reverse();
console.log(a); // [5, 4, 3, 2, 1]
/* sort方法会调用每个数组项的toString()转型方法,
然后比较得到的字符串,确定如何排序,如果要排序数字,
需要手写比较函数*/
a.sort();
console.log(a); // [1, 2, 3, 4, 5]
// concat
var a = [1, 2, 3];
var b = a.concat(); // 生成副本(可以用来返回数组的深度复制),该数组与a无关 [1, 2, 3]
var c = a.concat([4, 5, 6]); // [1, 2, 3, 4, 5, 6]
var d = a.concat(4, [5, 6]); // [1, 2, 3, 4, 5, 6]
// 获取子数组 slice & splice
var a = [1, 2, 3, 4, 5];
var b = a.slice(2); // [3, 4, 5]
var c = a.slice(2, 3); // [3] 开始位置 & 结束位置之前一位 (可以是负数)
// 删除 & 插入
var a = [1, 2, 3, 4, 5];
/* 删除a数组从index=1开始的两项,同时加入'red'、'black'字符串到该位置
返回被删除的项目 */
var b = a.splice(1, 2, 'red', 'black');
console.log(a, b); // [1, "red", "black", 4, 5] [2, 3]
// 位置方法
var a = [1, 2, 3, 4, 5, 4, 3, 2, 1];
/* 查找index=2开始的第一次出现3的位置,如没有,返回-1 */
var b = a.indexOf(3, 2); // 2
/* 反向查找index=7开始的第一次出现1的位置,如没有,返回-1 */
var c = a.lastIndexOf(1, 7); // 0
卧槽,indexOf 和 lastIndexOf 居然是 ES5 的方法,我今天才知道!!!(2016-05-28)
PS: 字符串中的 indexOf 方法支持 IE6+ (2016-06-02)
这里再补充下,如果要在一个数组前后添加另外一个数组的元素,可以使用apply()方法:
var a = [1, 2, 3];
var b = [4, 5];
// 同样的适用于unshift()
Array.prototype.push.apply(a, b);
console.log(a); // [1, 2, 3, 4, 5]
另外因为数组也是特殊的对象,所以for in、Object.keys()等方法它也是可以用的(虽然效率上不敢保证):
var a = [1, 2, 3, 4];
console.log(Object.keys(a)); // ["0", "1", "2", "3"]
for (var i in a) {
// ...
}
2、迭代方法
ECMAScript5为数组定义了5个迭代方法。每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象——影响this的值。传入这些方法中的函数会接收三个参数:数组项的值、该项在数组中的位置和数组对象本身。
every(): 对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。some(): 对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true。filter(): 对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。forEach():对数组中的每一项运行给定函数。这个方法没有返回值。map(): 对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
example:
var nums = [1, 2, 3, 4, 5, 6, 7];
// false 每一项都要满足
var a = nums.every(function(item, index, array) {
return item > 2;
});
// true 一项满足即可
var b = nums.some(function(item, index, array) {
return item > 2;
});
// [1, 3, 5, 7] 根据某条件筛选数组
var c = nums.filter(function(item, index, array) {
return item & 1;
});
// [1, 0, 1, 0, 1, 0, 1]
var d = nums.map(function(item, index, array) {
return item & 1;
});
// 跟for类似,会遍历所有数组元素(忽略return)
nums.forEach(function(item, index, array) {
// ...
})
brower support:IE9+、 ff2+、 Safari3+、 opera9.5+ 和 chrome
notice:这里要注意下forEach()方法,该方法在执行过程中不会break,所以即使有return语句也会遍历完所有数组。
3、归并方法
ECMAScript5还新增了两个归并数组的方法:reduce()和reduceRight()。这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。其中,reduce()方法从前往后,reduceRight()从后往前。
这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为归并基础的初始值。传给reduce()和reduceRight()的函数接收4个参数:前一个值、当前值、项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。如果reduce()方法接受了第二个参数,则第一次迭代发生在数组的第一项,这时的pre值就是第二个参数值;如果没有第二个参数,则第一次迭代发生在数组的第二项,这时的pre则是数组第一项值。
var nums = [1, 2, 3, 4, 5];
var add = 0;
// sum === 15
var sum = nums.reduce(function(pre, item, index, array) {
return pre + item;
}, add);
利用reduce()函数可以求数组最大值(尽管我们知道用Math.max.apply更加方便):
var a = [3, 1, 4, 2, 5];
var maxn = a.reduce(function(pre, item) {
return Math.max(pre, item);
});
console.log(maxn); // 5
// 求value的最大值
var b = {a:3, b:1, c:4, d:2, e:5};
var _maxn = Object.keys(b).reduce(function(pre, item) {
return Math.max(pre, b[item]);
}, -Number.MAX_VALUE);
console.log(_maxn); // 5
JavaScript Array的更多相关文章
- JavaScript Array 对象
JavaScript Array 对象 Array 对象 Array 对象用于在变量中存储多个值: var cars = ["Saab", "Volvo", & ...
- JavaScript Array(数组)对象
一,定义数组 数组对象用来在单独的变量名中存储一系列的值. 创建 Array 对象的语法: new Array(); new Array(size); new Array(element0, elem ...
- Javascript Array.prototype.some()
当我们使用数组时,查找数组中包含某个特殊的项是非常常见的动作.下面例子是一个简单的实现: 01 planets = [ 02 "mercury", 03 " ...
- [Javascript ] Array methods in depth - sort
Sort can automatically arrange items in an array. In this lesson we look at the basics including how ...
- Javascript Array 方法整理
Javascript Array 方法整理 Javascript 数组相关方法 说明 大多数其它编程语言不允许改变数组大小,越界访问索引会报错,但是 javascript不会报错,不过不建议直接修改a ...
- javascript array操作
首先来看一下怎么判断一个对象是不是数组: 1.Array.isArray(obj) 调用数组的isArray方法 2.obj instanceof Array 判断对象是否是Array的实例 3.Ob ...
- JavaScript : Array assignment creates reference not copy
JavaScript : Array assignment creates reference not copy 29 May 2015 Consider we have an array var a ...
- JavaScript Array 数组方法汇总
JavaScript Array 数组方法汇总 1. arr.push() 从后面添加元素,返回值为添加完后的数组的长度 var arr = [1,2,3,4,5] console.log(arr.p ...
- JavaScript Array filter() 方法
JavaScript Array filter() 方法 var ages = [32, 33, 16, 40]; function checkAdult(age) { return age > ...
- JavaScript Array 對象
JavaScript array 對象 array對象,是用於在單個變量中存儲多個值的一種變量類型. 創建array對象的語法: new array(); new array(size); new a ...
随机推荐
- mysql执行计划
烂sql不仅直接影响sql的响应时间,更影响db的性能,导致其它正常的sql响应时间变长.如何写好sql,学会看执行计划至关重要.下面我简单讲讲mysql的执行计划,只列出了一些常见的情况, ...
- PHP 类型判断和NULL,空值检查
PHP是一种宽松类型的编程语言,在函数中对传入的参数值的“类型”以及”值是否为空或者NULL“进行检查是不可缺少的步骤. 类型检查 从PHP5开始,PHP允许对函数的参数进行类型约束,即可以约束参数的 ...
- 根据上一行填充本行的空白栏位,SQL处理方式
我在4年多前,写了一篇Excel处理空白Cell的文章,http://www.cnblogs.com/studyzy/archive/2010/04/07/1706203.html,其实在数据库中也会 ...
- JavaWeb防止表单重复提交(转载)
转载自:http://blog.csdn.net/ye1992/article/details/42873219 在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用 ...
- c# winform插件
插件接口 namespace IMsg { ///<summary> /// 这是插件必须实现的接口,也是主程序与插件通信的唯一接口 /// 换句话说,主程序只认识插件里的这些方法 /// ...
- mybatis oracle BLOB类型字段保存与读取
一.BLOB字段 BLOB是指二进制大对象也就是英文Binary Large Object的所写,而CLOB是指大字符对象也就是英文Character Large Object的所写.其中BLOB是用 ...
- Spring mvc框架 controller间跳转 ,重定向 ,传参
一.需求背景 1. 需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. @Req ...
- QT学习第2天
回顾: 1.构建一个QT工程步骤 (1)qmake -project (2)qmake (3)make 2.两个常用的组件 QLabel 标签 QPushButton 按钮 --------- ...
- Android Paint和Color类绘画实例
要绘图,首先得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上.Android 中的画笔是 Paint类,Paint 中包含了很多方法对其属性进行设置,主要方法如下: se ...
- MyEclipse 启动 tomcate 失败 解决方法
MyEclipse中启动tomcate失败 十月 20, 2015 9:53:04 下午 org.apache.catalina.startup.VersionLoggerListener log信息 ...