数组 Array [] 的方法:
有下标,有length
Array.from(类数组) 类数组转数组
1.将一个类数组对象或者可遍历对象转换成一个真正的数组。
(类数组:是一个有length,属性名是数字的对象(像数组,却不能用数组的方法)。比如:获取的一组元素/arguments)
2.Array.from(类数组,()=>{})还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。
3.可以将字符串转换为数组
4.Array.from参数是一个真正的数组,会返回一个一模一样的新数组。
>>更多类数组 转 数组的方法,看另一篇随笔<<
1 let arr = [12,45,97,9797,564,134,45642];
2 let set = new Set(arr);
3 console.log(Array.from(set, item => item + 1));// [ 13, 46, 98, 9798, 565, 135, 45643 ]
/*查询类 indexof lastIndexOf includes Array.isArray()
indexOf 找到数组中指定字符首次出现的索引,需要传参,不会改变原数组,返回位置的索引,找不到返回-1
lastIndexOf 找到数组中指定字符末次出现的索引,找不到返回-1
includes 找到数组中是否包含某一项,返回值是布尔值true/false
Array.isArray() 检测判断是否为数组 */
1 let ary = [0, 1, 2, 3, "zhufengpeixun", 0, 1, 2, 3];
2 console.log(ary.indexOf(7));//-1
3 console.log(ary.lastIndexOf(3));// 8
4 console.log(ary.includes("zhufengpeixun"));//true
5 console.log(Array.isArray(ary));//true
/*截取类 slice
slice 截取数组指定位置的数据,需要传参,不会改变原数组,返回一个新数组。
ary.slice(n,m)从第n位开始截到第m-1位*/
1 let ary1 = [0, 1, 2, 3, 4, 5];
2 console.log(ary1.slice(2, 4));//[2, 3]
/*操作类 push pop unshift shift splice findIndex() find()
push 往数组的末尾添加一个或多个数据,需要传参, 会改变原数组,返回值是新数组的length。
pop() 往数组的末尾删除一个数据, 不需要传参,会改变原数组,返回值就是删除的那个数据。
unshift 往数组的首位添加一个或多个数据,需要传参, 会改变原数组,返回值是新数组的length。
shift 往数组的首位删除一个数据, 不需要传参,会改变原数组,返回值就是删除的那个数据。
splice 能够增、删、改、查数组, 需要传参, 会改变原数组,返回值就是删除的那段数组。
findIndex 能够返回符合callback条件的那一项的索引,不改变原数组,没有匹配项就返回 -1
find() 找到数组中符合callback条件的值,而不是索引,不改变原数组,没有匹配项为undefined
*/
1 let ary2 = [0, 1, 2, 3, 4, 5];
2 console.log(ary2.push(6, '7'));//8
3 console.log(ary2);//[0, 1, 2, 3, 4, 5, 6, "7"]
4 console.log(ary2.pop());//'7'
5 console.log(ary2.unshift('f'));//8
6 console.log(ary2.shift());//'f'
7 let a = ary2.splice(1, 2, 'f', 'd', 'd');//从第一项开始,删除2个,添加"f",'d','d'
8 console.log(ary2);//[0, "f", "d", "d", 3, 4, 5, 6]
9 console.log(a);//[1, 2]
10 let b = ary2.findIndex((e)=>{
return e === 3
})
console.log(b)//复合条件的第一项的索引
/*连接 join concat
join 用指定字符拼接数组 需要传参,不会改变原数组,返回值为字符串。
concat 把两个数组拼接成一个,需要传参,不会改变原数组,返回值为拼接后的新数组。
*/
1 let ary3 = ['zhu', 'uo'];
2 let ary4 = [520, 1314];
3 console.log(ary3.join('g'));//'zhuguo'
4 console.log(ary3);//["zhu", "uo"]
5 console.log(ary3.concat(ary4));//["zhu", "uo", 520, 1314]
/*翻转 reverse
reverse 翻转数组,不需要传参,改变原数组,返回值是翻转后的数组
*/
1 ary5 = [1, 2, 3, 4, 5];
2 console.log(ary5.reverse());//[5, 4, 3, 2, 1]
3 console.log(ary5);
/*排序 sort
sort 参数是一个函数,函数有两个形参,return a-b是升序,b-a是降序
*/
1 ary5 = [4, 2, 5, 3, 1];
2 ary5.sort(function (a, b) {
3 return a - b
4 });
5 console.log(ary5);//[1, 2, 3, 4, 5]
//数组包对象
ary5=[{age:18},{age:19}]
ary5.sort(function (a, b) {
return a.age - b.age
});
循环 forEach 、map 、filter 、some 、every 、reduce(缩减,最终成为一个数字,完成累加的效果)
??????????????????以后用到再补充定义??????????????????????
forEach 专门循环数组的,方法用于调用数组的每个元素,并将元素传递给回调函数,有多少项就执行多少次。没有返回值
注意: forEach() 对于空数组是不会执行回调函数的。
两个参数: 1.回调函数(1.每一个数据(必须)2.索引(可选)3.整个数组(可选))
2.改变this的方向(可选,如果这个参数为空,this会指向undefined)
map 循环数组,返回一个新数组,有多少项就执行多少次。(返回判断结果)不会改变原数组的值
every 数组中有一个false,返回值就是false
数组中全为true,返回值就是true
some 在数组中只要有一个成立,返回值就为true
filter 过滤,返回一个过滤后的数组。(返回符合判断的结果),不会改变原数组
continue 跳过本次循环,进入下一次循环
break 跳出(结束)整个循环
return 终止此作用域 return 后面的所有代码
(continue 和 break 在循环中的详细对比)
1 let arr6 = [2, 3, 5, 6, 8, 9];
2 let b = arr6.forEach(function (ele, i, all) {
3 //console.log(ele);//2 3 5 6 8 9
4 //console.log(i);//0 1 2 3 4 5
5 //console.log(all);//[2, 3, 5, 6, 8, 9] 而且返回了length 次
6 console.log(this);//#document 输出了length次
7 return 1
8 }, document);
9 console.log(b);//undefined
10 /*****************************map********************************/
11 let c = arr6.map(function (ele, i, all) {
12 //console.log(ele);//2 3 5 6 8 9
13 //console.log(i);//0 1 2 3 4 5
14 //console.log(all)//[2, 3, 5, 6, 8, 9]
15 return ele = 2
16 });
17 console.log(c);//[true]
18 /****************************every********************************/
19 let d = arr6.every(function (item,index) {
20 // console.log(item);//2 3 5 6 8 9
21 // console.log(index);//0 1 2 3 4 5
22 return item>2//条件中一个不成立就为false,全部成立就为true。
23 });
24 console.log(d);//true|false
25 /***************************some***********************************/
26 let e = arr6.some(function (item,index) {
27 return item>4//条件中有一个成立就为true,全部不成立就为false。
28 });
29 console.log(e);//true|false
30 /*****************************filter********************************/
31 let f = arr6.filter(function (item,index) {
32 return item>5;//把符合条件的放在一个数组总
33 });
34 console.log(f);//[6, 8, 9]
缩减:reduce( 回调函数,初始值 )
当需要计算、统计数组中的每一项的结果时用它
这一次的结果需要上一次的返回
通多一些算法,将一个数组缩减成一个。比如:累加、累减、累乘、累除等等。
arr.reduce((a,b)=>{ return a+b },0)
let arr = [2, 4, 6, 8, 10];
let a = arr.reduce((a, b) => {//a:代表上一次的结果。 b:是本次循环的那个。
return a + b
},0);//零是初始值
console.log(a);//累加 结果是 30
let ary = arr.reduce((a,b)=>{
a.push(b);
return a
},[]); //初始值可以是数字、数组[]、对象{}
console.log(ary);//[2, 4, 6, 8, 10]