JavaScript数组方法库
参考链接https://segmentfault.com/a/1190000010827833
参考链接http://www.w3school.com.cn/jsref/jsref_obj_array.asp
JavaScript中万物皆对象,那么数组也就是JavaScript Array对象
创建 Array 对象的语法:
new Array();
new Array(size);
new Array(element0, element1, ..., elementn);
Array 对象属性
//继承自object的属性
object.constructor
object.prototype
//arrayObject对象独有的属性
arrayObject.length
Array 对象方法
1、concat()
//连接两个或更多的数组,并返回结果。改变原数组
//该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
arrayObject.concat(arrayX,arrayX,......,arrayX)
//示例1
var a = [1,2,3];
b=concat(4,5);
a //[1,2,3]
b //[1,2,3,4,5]
//示例2
var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
var arr2 = new Array(3)
arr2[0] = "James"
arr2[1] = "Adrew"
arr2[2] = "Martin"
arr.concat(arr2) //[George,John,Thomas,James,Adrew,Martin]
2、join()
//join() 方法用于把数组中的所有元素放入一个字符串,返回一个字符串。不改变原数组
//separator可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。
arrayObject.join(separator)
//示例
arr.concat(arr2) //[George,John,Thomas]
3、pop() 与shift()
//pop() 方法用于删除并返回数组的最后一个元素,返回删除的元素。改变原数组
//shift()方法用于删除并返回数组的第一个元素,返回删除的元素。改变原数组
//如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值。
arrayObject.pop()
//示例
b.pop() // 5
b //[1,2,3,4]
4、push()
//push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。改变原数组
//push() 方法和 pop() 方法使用数组提供的先进后出栈的功能。
arrayObject.push(newelement1,newelement2,....,newelementX)
//示例
b.push(6) // 5
b //[1,2,3,4,6]
5、reverse()
//reverse() 方法用于颠倒数组中元素的顺序,返回改变的数组。改变原数组
arrayObject.reverse()
//示例
b.reverse() //[6,4,3,2,1]
b //[6,4,3,2,1]
6、slice()
//slice() 方法可从已有的数组中返回选定的元素,返回新数组。不改变原数组
//[start,end)前闭后开,end不填,默认取到最后
//如果是负数,那么它规定从数组尾部开始算起的位置。
//也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
arrayObject.slice(start,end)
b.slice(-2) //[2,1]
b //[6,4,3,2,1]
7、sort()
//sort()的用法,对原数组进行排序,返回操作后的数组。改变原数组
foo = [4,9,2,6];
foo.sort((a,b)=> a-b) // a>b,即降序 [2,4,6,9]
foo.sort((a,b)=> b-a) // a<b,即升序 [9,6,4,2]
8、splice()
//splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。改变原数组
//index必需。整数,规定添加/删除项目的位置。howmany必需。要删除的项目数量。
//item1, …, itemX 可选。向数组添加的新项目。
arrayObject.splice(index,howmany,item1,.....,itemX)
//示例
foo = [4,9,2,6];
foo.splice(2,1,9) // 2
foo // [4,9,9,6]
9、toString()
//toString() 方法可把数组转换为字符串,返回值与没有参数的 join() 方法返回的字符串相同。
arrayObject.toString()
10、toLocalString()
//把数组转换为本地字符串。
//首先调用每个数组元素的 toLocaleString() 方法,
//然后使用地区特定的分隔符把生成的字符串连接起来,形成一个字符串。
arrayObject.toLocaleString()
11、unshift()
//unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。改变原数组
//不兼容IE
arrayObject.unshift(newelement1,newelement2,....,newelementX)
12、valueOf()
//valueOf() 方法返回 Array 对象的原始值。
//该原始值由 Array 对象派生的所有对象继承。
//valueOf() 方法通常由 JavaScript 在后台自动调用,并不显式地出现在代码中。
arrayObject.valueOf()
13、reduce()
1.reduce()方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值.
array.reduce(callback, initialValue)
2.callback:执行数组中每个值的函数(也可以叫做reducer),包含4个参数.
1.previousValue:上一次调用回调返回的值,或者是提供的初始值(initialValue)
2.currentValue:数组中当前被处理的元素
3.index:当前元素在数组中的索引
4.array:调用reduce的数组
initialValue:作为第一次调用callback的第一个参数,这个参数不是必需的.
var s = a.reduce((prev, current) => {
return prev + current; // 1 + 2, 3+ 3
}, 10);
console.log(s);
var todos = [{
id: 1,
completed: true
}, {
id: 2,
completed: false
}, {
id: 3,
completed: true
}, {
id: 4,
completed: true
}, {
id: 5,
compelted: false
}];
const completedCount = todos.reduce((count, current) => {
return current.completed ? count + 1 : count
}, 0);
console.log(completedCount); // 3
const unCompleted = todos.reduce((count, current) => {
return !current.completed ? count + 1 : count;
}, 0);
console.log(unCompleted); // 2
var count = 0;
todos.map((item) => {
if (item.completed) {
count++;
}
});
console.log(count); // 3
14、filter()
1.filter()方法,过滤器。使用指定的函数测试所有元素,并创建一个包含所有通过测试的元素的新数组.
array.filter(callback, thisArg)
2.callback:用来测试数组的每个元素的函数,包含三个参数.
返回true表示保留该元素(通过测试),返回false则不保留.
currentValue:数组中当前被传递的元素.
var a = [1, 2, 3, 4, 5];
var b = a.filter((item) => {
return item > 3;
});
console.log(b);
var todos = [{
id: 1,
completed: true
}, {
id: 2,
completed: false
}, {
id: 3,
completed: true
}, {
id: 4,
completed: true
}, {
id: 5,
compelted: false
}];
var completedTodos = todos.filter((item) => {
return item.completed;
});
console.log(completedTodos);
15、map()
1.map()方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组.
array.map(callback, thisArg)
callback:原数组中的元素调用该方法后返回一个新的元素.
currentValue:数组中当前被传递的元素.
var a = [1, 2, 3, 4, 5];
var b = a.filter((item) => {
return item > 3;
});
console.log(b); // [4 ,5]
var bb = [];
a.map((item) => {
if (item > 3) {
bb.push(item);
}
});
console.log(bb); // [4, 5]
var bbb = a.map((item) => {
return item + 1;
});
console.log(bbb); // [2, 3, 4, 5, 6]
16、every()
1.every()方法用于测试数组中所有元素是否都通过了指定函数的测试,返回Boolean
array.every(callback, thisArg);
var a = [1, 2, 3, 4, 5];
var b = a.every((item) => {
return item > 0;
});
var c = a.every((item) => {
return item > 1;
});
console.log(b); // true
console.log(c); // false
17、some()
1.some()方法用于测试数组中是否至少有一项元素通过了指定函数的测试.
array.some(callback, thisArg);
var bb = a.some((item) => {
return item > 4;
});
var cc = a.some((item) => {
return item > 5;
});
console.log(bb); // true
console.log(cc); // false
18、forEach()
1.forEach()为每个元素执行对应的方法.
var a = [1, 2, 3, 4, 5];
var b = [];
a.forEach((item) => {
b.push(item + 1);
});
console.log(b); // [2,3,4,5,6]
19、indexOf()
1.indexOf()方法返回在该数组中第一个找到的元素位置,如果它不存在则返回-1.
var a = [1, 2, 3, 4, 5];
var b = a.indexOf(2);
var c = a.indexOf(6);
var e = a.indexOf('');
console.log(b); // 1
console.log(c); // -1
console.log(e); // 0