数组相关方法
详细解读:
注:变异方法标红
1.pop——删除并返回数组的最后一个元素。
语法:arrayObject.pop()
返回值:arrayObject最后一个元素。
var arr = [1,2,3,4];
var result = arr.pop();
console.log(arr); // [1, 2, 3]
console.log(result) // 4
2.push——向数组的末尾添加一个或者更多元素,并返回新的长度。
语法:arrayObject.push(newelement1,newelement2,…,newelementX)
返回值:数组新的长度
3.reverse——用于颠倒数组中的元素顺序。
语法:arrayObject.reverse()
注:该方法会改变原来数组,而不是创建新数组。
4.shift——用于把数组的第一个元素从其中删除,并返回该元素
返回值:数组原来的第一个元素的值。
5.unshift——向数组的首部添加一个或者更多元素,并返回新的长度。
6.sort——用于对数组的元素进行排序
语法:arrayObject.sort(sortby)
返回值:对数组的引用。
let arr = [25,148,12,6,38];
let result = arr.sort();
console.log(result) //[12, 148, 25, 38, 6] //这是按照字符进行排序的
console.log(arr) //[12, 148, 25, 38, 6]
let arr = [25,148,12,6,38];
let result = arr.sort((a,b) => a - b);
console.log(result) //[6, 12, 25, 38, 148] //升序排序
console.log(arr) //[6, 12, 25, 38, 148]
总的来说,数组的sort方法里面的参数是一个回调函数,有俩个值,返回值如果是第一个值减去第二个值那么就是从小到大排序,如果是第二个值减去第一个值就是从大到小排序。
_
7.splice——向/从数组中添加/删除项目,然后返回被删除的项目。
语法:arrayObject.splice(index,howmany,item1,…,itemX)
参数:index:规定添加/删除项目的位置,可以是负数
howmany:要删除的项目数量,为零,表示不删除。
item1-itemX:向数组添加的新项目。
-向数组指定位置添加元素-
let arr = [1,2,3];
let result = arr.splice(2,0,4,5); //向数组索引为2的地方添加两个元素,分别是4和5
console.log(result) //Array(0)
console.log(arr) //[1,2,4,5,3]
-从数组指定位置删除指定数目的元素-
let arr = [1,2,3];
let result = arr.splice(1,2); //从数组中索引为1的位置删除两个元素
console.log(result) //[2,3] //返回删除的数组
console.log(arr) //[1]
8.concat()——用于链接两个或者多个数组** (不改变原数组)**
语法:arrayObject.concat(arrayX,arrayX,…,arrayX)
参数:可以是具体要合并的数组元素也可以是一个数组对象。
返回值:一个新的数组。
9.join()——用于把数组中的所有元素放入一个字符串中。(不改变原数组)
语法:arrayObject.join(separator)
参数:分隔符
返回值:一个字符串。
10.slice——从已有的数组中返回选定的元素。(不改变原数组)
语法:arrayObject.slice(start,end)
参数:start:规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。
end:规定从何处结束选取。
返回值:一个新的数组,包含start到end的arrayObject中的元素。
注:(截取的数组不包含结束索引对应的元素)
(如果不指定给开始和结束的索引,则直接拷贝数组)
let arr = [1,2,3,4,5,6];
let result = arr.toString();
console.log(result) //1,2,3,4,5,6
console.log(arr) //[1,2,3,4,5,6]
11.toString——数组转字符串,并返回结果。(不改变原数组)
语法:arrayObject.toString()
注:数组中的元素之间用逗号分隔,相当于使用join方法。
12.map——遍历数组中的每一个元素,提供一个函数用来操作元素,结果最为一个新的数组返回。(不改变原数组)
var arr = [1,2,3,4];
var result = arr.map(t=>t*2);
console.log(arr); //[1, 2, 3, 4]
console.log(result) // [2, 4, 6, 8]
13.forEach——对数组的每个元素执行一次提供的函数,没有返回值。(不改变原数组)
var arr = [1,2,3,4];
arr.forEach(function(currentValue,index,arr){
v=v+2;
//currentValue:当前元素
//index:当前索引
//arr:原数组
});
console.log(arr); //[1, 2, 3, 4]
14.filter——对数组中的每一个元素进行判断,将满足条件的元素作为一个新的数组返回,新数组是满足条件的所有元素。(不改变原数组)
var arr = [1,2,3,4];
var res = arr.filter(function(v,i){
if(v>2){
return v
}
});
console.log(arr); //[1, 2, 3, 4]
console.log(res); //[3,4]
15.every——对数组中的每一个元素进行判断,数组中的每一个元素都满足条件,返回true,否则返回false。(不改变原数组)
16.some——对数组中的每一个元素进行判断,数组中的至少一个元素满足条件,返回true,否则返回false。(不改变原数组)
17.reduce——对数组中的所有元素进行操作后,返回一个结果。**(不改变原数组)
语法:array.reduce((reslute, currentValue, index, array) => {}, initialValue)适合用来计算数组某一指定内容的累加或者其他运算结果的总结果。
参数说明:
reslute:累计器累计回调的返回值; 它是上一次调用回调时返回的累积值
c****urrentValue:数组中正在处理的元素。
index:数组中正在处理的当前元素的索引
array:调用reduce()的数组
initialValue:作为第一次调用 callback函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错。
var arr = [1,2,3,4];
var res = arr.reduce(function(a,b){
return a+b
});
console.log(arr); //[1, 2, 3, 4]
console.log(res); //10
let arr = [1, 2, 3];
const result = arr.reduce((res, cur) => {
return res += cur; //注意要把每一次的计算结果返回给res。
},0); //这个0是res的初始值,可改为任意数字。
console.log(result) // 6
const baseAttr = {
min: "%s最小长度为:min",
max: "%s最大长度为:max",
length: "%s长度必须为:length",
range: "%s长度为:range",
pattern: "$s格式错误"
};
const attrs = Object.keys(baseAttr).reduce((attrs, key) => {
console.log(attrs)
attrs[key] = (attr, message = "", opt = {}) => {
const _attr =
key === "range" ? { min: attr[0], max: attr[1] } : { [key]: attr };
return {
message: message.replace(
`:${key}`,
key === "range" ? `${attr[0]}-${attr[1]}` : attr
),
type: "string",
..._attr,
...opt
};
};
// bindMessage(attrs[key], baseAttr[key]);
return attrs;
}, {});
18.includes——判断一个数组是否包含一个指定的值,如果是返回true。
语法:arr.includes(searchElement)
arr.includes(searchElement, fromIndex)
参数:searchElement:需要查找的元素值
fromIndex:从该索引处开始查找
let site = ['runoob', 'google', 'taobao'];
site.includes('runoob');
// true
site.includes('baidu');
// false
var arr = ['a', 'b', 'c'];
arr.includes('c', 3); //false
arr.includes('c', 100); // false
var arr = ['a', 'b', 'c'];
arr.includes('a', -100); // true
19.indexOf()——返回数组中某个指定的元素位置,如果在数组中没找到指定元素则返回 -1。
语法:array.indexOf(item,start)
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var a = fruits.indexOf("Apple"); //2
20.new Set(arr)——es6新增数组方法,保证所有元素的唯一性。
let set6 = new Set([1, 2, 2, 3, 4, 3, 5])
console.log(set6)//{1, 2, 3, 4, 5}
21.提取数组指定深度的方法
flat(Infinity/空)
返回值是遍历到的所有元素集合。
let arr = [1,2,[3,4,[5,6]]],
res = arr.flat(Infinity), //无限递归,直到最后
res2 = arr.flat(); //如果不传参数那么只递归一次
console.log(arr) //[1,2,[3,4,[5,6]]]
console.log(res) //[1, 2, 3, 4, 5, 6]
console.log(res2) //[1,2,3,4,[5,6]]