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 inObject.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的值。传入这些方法中的函数会接收三个参数:数组项的值、该项在数组中的位置和数组对象本身。

  1. every(): 对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。
  2. some(): 对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true。
  3. filter(): 对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。
  4. forEach():对数组中的每一项运行给定函数。这个方法没有返回值。
  5. 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的更多相关文章

  1. JavaScript Array 对象

    JavaScript Array 对象 Array 对象 Array 对象用于在变量中存储多个值: var cars = ["Saab", "Volvo", & ...

  2. JavaScript Array(数组)对象

    一,定义数组 数组对象用来在单独的变量名中存储一系列的值. 创建 Array 对象的语法: new Array(); new Array(size); new Array(element0, elem ...

  3. Javascript Array.prototype.some()

    当我们使用数组时,查找数组中包含某个特殊的项是非常常见的动作.下面例子是一个简单的实现: 01 planets = [ 02     "mercury", 03     " ...

  4. [Javascript ] Array methods in depth - sort

    Sort can automatically arrange items in an array. In this lesson we look at the basics including how ...

  5. Javascript Array 方法整理

    Javascript Array 方法整理 Javascript 数组相关方法 说明 大多数其它编程语言不允许改变数组大小,越界访问索引会报错,但是 javascript不会报错,不过不建议直接修改a ...

  6. javascript array操作

    首先来看一下怎么判断一个对象是不是数组: 1.Array.isArray(obj) 调用数组的isArray方法 2.obj instanceof Array 判断对象是否是Array的实例 3.Ob ...

  7. JavaScript : Array assignment creates reference not copy

    JavaScript : Array assignment creates reference not copy 29 May 2015 Consider we have an array var a ...

  8. JavaScript Array 数组方法汇总

    JavaScript Array 数组方法汇总 1. arr.push() 从后面添加元素,返回值为添加完后的数组的长度 var arr = [1,2,3,4,5] console.log(arr.p ...

  9. JavaScript Array filter() 方法

    JavaScript Array filter() 方法 var ages = [32, 33, 16, 40]; function checkAdult(age) { return age > ...

  10. JavaScript Array 對象

    JavaScript array 對象 array對象,是用於在單個變量中存儲多個值的一種變量類型. 創建array對象的語法: new array(); new array(size); new a ...

随机推荐

  1. Oracle行内链接不会引起USER_TABLES中CHAIN_CNT值变化

    前几天和群里网友讨论一个关于行内链接(intra-block chaining)的问题,问题非常有意思,恰好今天有空,顺便整理了一下这些知识点. 问题描述:下面SQL,创建一个超过255列的表(实际为 ...

  2. 尝试一下sql server2016里面的json功能

    前2天下载了一个2016的rc版本来玩一下,首先感觉是~开发者版本免费啦!!撒花!!!另外一个东西,sql server 2016能支持json 的解析和应用啦,虽然我不知道它的性能如何,先来一发测试 ...

  3. SQL Server开发接口生成方法

    为提高开发效率,生成固定格式的接口是必须的,以下以提供新增/修改/删除/读取接口为例: 以常见的表结构为例,特殊表结构可自己尝试去调整方法 主要通过系视图 sys.columns生成方法:为包含列的对 ...

  4. db2数组、函数

    一. 数组 在db2中,创建一个数组会在functions下生成两个对象:sys类型和用户类型的Array /*创建数组*/ ) array[]; /*删除数组*/ drop type arrName ...

  5. linux 中/proc 详解

    proc 文件系统 在Linux中有额外的机制可以为内核和内核模块将信息发送给进程-- /proc 文件系统.最初设计的目的是允许更方便的对进程信息进行访问(因此得名),现在它被每一个有有趣的东西报告 ...

  6. (转)android.intent.action.MAIN与android.intent.category.LAUNCHER

    android.intent.action.MAIN决定应用程序最先启动的Activity android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里 在网上看到 ...

  7. PHP读取超大文件的实例代码

    数据量大带来的问题就是单个文件很大,能够打开这个文件相当不容易,记事本就不要指望了,果断死机   去年年底的各种网站帐号信息的数据库泄漏,很是给力啊,趁机也下载了几个数据库,准备学学数据分析家来分析一 ...

  8. 免费股票数据API接口

    免费股票数据API接口提供沪深.香港.美国股市信息. 1.沪深股市 2.香港股市 3.美国股市 4.香港股市列表 5.美国股市列表 6.深圳股市列表 7.沪股列表 API文档:https://www. ...

  9. 带有天气预报的高大上web报表制作分享

    我用FineReport开发了挺多报表,但集成天气预报这样提高交互和人性化的还是第一次,所以跟大家分享下. 这个报表是综合的门店销售管理分析面板,可以查询业绩分析.店员销售分析,店铺排行分析(可以看出 ...

  10. [转]jQuery: how to get which button was clicked upon form submission?

    本文转自:http://stackoverflow.com/questions/5721724/jquery-how-to-get-which-button-was-clicked-upon-form ...