数组方法整理
Array对象具有下列方法:
拼接
concat()
连接两个数组并返回一个新的数组,不改变原数组。
var myArray = new Array("1", "2", "3"); myArray = myArray.concat("a", "b", "c"); // myArray is now ["1", "2", "3", "a", "b", "c"]
转换
join(sep)
把数组的每一项用sep链接起来,返回连接后的字符串,如果Array的元素不是字符串,将自动转换为字符串后再连接。
var myArray = new Array("Wind", "Rain", "Fire"); var list = myArray.join(" - "); // list is "Wind - Rain - Fire"
添加
push()
在数组末尾添加一个或多个元素,并返回数组操作后的长度。
var myArray = new Array("1", "2"); myArray.push("3"); // myArray is now ["1", "2", "3"]
unshift()
在数组开头添加一个或多个元素,并返回数组的新长度。
var myArray = new Array ("1", "2", "3"); myArray.unshift("4", "5"); // myArray becomes ["4", "5", "1", "2", "3"]
移除
pop()
从数组移出最后一个元素,并返回该元素。
var myArray = new Array("1", "2", "3"); var last = myArray.pop(); // myArray is now ["1", "2"], last = "3"
shift()
从数组移出第一个元素,并返回该元素。
var myArray = new Array ("1", "2", "3"); var first = myArray.shift(); // myArray is now ["2", "3"], first is "1"
截取
slice(start_index, upto_index)
从数组提取一个片段,并作为一个新数组返回。
var myArray = new Array ("a", "b", "c", "d", "e"); myArray = myArray.slice(1, 4); // starts at index 1 and extracts all elements // until index 3, returning [ "b", "c", "d"]
splice(index, how, item1, item2, ...)
从index开始数组移出how个元素,用itemn替换它们。
var myArray = new Array ("1", "2", "3", "4", "5"); myArray.splice(1, 3, "a", "b", "c", "d"); // myArray is now ["1", "a", "b", "c", "d", "5"] // This code started at index one (or where the "2" was), // removed 3 elements there, and then inserted all consecutive // elements in its place.
排序
reverse()
颠倒数组元素的顺序:第一个变成最后一个,最后一个变成第一个。
var myArray = new Array ("1", "2", "3"); myArray.reverse(); // transposes the array so that myArray = [ "3", "2", "1" ]
搜索
indexOf(item, Index)
在数组中从index开始搜索item
并返回第一个匹配的索引,找不到返回-1
var a = ['a', 'b', 'a', 'b', 'a']; console.log(a.indexOf('b')); // logs 1 // Now try again, starting from after the last match console.log(a.indexOf('b', 2)); // logs 3 console.log(a.indexOf('z')); // logs -1, because 'z' was not found
lastIndexOf()
和 indexOf 差不多,但这是从结尾开始,并且是反向搜索。
var a = ['a', 'b', 'c', 'd', 'a', 'b']; console.log(a.lastIndexOf('b')); // logs 5 // Now try again, starting from before the last match console.log(a.lastIndexOf('b', 4)); // logs 1 console.log(a.lastIndexOf('z')); // logs -1
遍历
forEach(callback[, thisObject])
在数组每个元素项上执行callback
。
var a = ['a', 'b', 'c']; a.forEach(function(element) { console.log(element);} ); // logs each item in turn
高阶函数
map()
在数组的每项上执行callback函数,返回回调函数返回值的新数组
var a1 = ['a', 'b', 'c']; var a2 = a1.map(function(item) { return item.toUpperCase(); }); console.log(a2); // logs A,B,C
reduce()
这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,效果如下例:
var a = [10, 20, 30]; var total = a.reduce(function(first, second) { return first + second; }, 0); console.log(total) // Prints 60 // 比方说对一个Array求和 var arr = [1, 3, 5, 7, 9]; arr.reduce(function (x, y) { return x + y; }); // 25
reduceRight(callback[, initalvalue])
和 reduce()相似,但这从最后一个元素开始的。
sort()
给数组元素排序。
var arr = [10, 20, 1, 2]; arr.sort(function (x, y) { if (x < y) { return -1; } if (x > y) { return 1; } return 0; }); // [1, 2, 10, 20]
过滤
filter()
返回一个包含所有在回调函数上返回为true的元素的新数组
var a1 = ['a', 10, 'b', 20, 'c', 30]; var a2 = a1.filter(function(item) { return typeof item == 'number'; }); console.log(a2); // logs 10,20,30
every(callback[, thisObject])
当数组中所有元素在callback上都返回true时就返回true
function isNumber(value){ return typeof value == 'number'; } var a1 = [1, 2, 3]; console.log(a1.every(isNumber)); // logs true var a2 = [1, '2', 3]; console.log(a2.every(isNumber)); // logs false
some(callback[, thisObject])
只要数组中有一项在callback上被返回true,就返回true
function isNumber(value){ return typeof value == 'number'; } var a1 = [1, 2, 3]; console.log(a1.some(isNumber)); // logs true var a2 = [1, '2', 3]; console.log(a2.some(isNumber)); // logs true var a3 = ['1', '2', '3']; console.log(a3.some(isNumber)); // logs false
推导式
下面的推导式创建一个数字数组并且创建一个新的数组,数组的每个元素都是原来数值的两倍
var numbers = [1, 2, 3, 4]; var doubled = [i * 2 for (i of numbers)]; console.log(doubled); // logs 2,4,6,8
这跟下面的map()方法的操作是等价的。
var doubled = numbers.map(function(i){return i * 2;});
推导式也可以用来筛选满足条件表达式的元素. 下面的推导式用来筛选是2的倍数的元素:
var numbers = [1, 2, 3, 21, 22, 30]; var evens = [i for (i of numbers) if (i % 2 === 0)]; console.log(evens); // logs 2,22,30