数组方法整理

时间:2021-01-12 19:01:52

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