数组方法整理
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

浙公网安备 33010602011771号