数组基础知识总结
(1)所有的对象都具有toLocaleString(),toString()和valueOf()方法,其中调用valueOf方法返回数组本身,toString()返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串;为了创建这个字符串会调用数组每一项的toString()方法;
alert()接收字符串参数;因此会在后台调用toString()方法;即与数组调用toString()方法得到的结果相同;
(2)join只接收一个参数,作为分隔符的字符串,然后返回包含所有数组项的字符串;
1 var colors=['red','blue','yellow']; 2 console.log(colors.join('*'));//red*blue*yellow
(3)栈方法:栈:是一种数据结构,最新添加的数据最早被删除,栈中项的插入和移除只发生在顶部;
1 var colors=['red','blue','yellow']; 2 var item=colors.pop(); 3 alert(item);//yellow;返回的是被移除的那个项;
(4)队列方法与栈方法相对应,是先进先出;
(5)数组重新排序:
a.reverse方法:反转
1 var values=[1,2,3,4,5]; 2 values.reverse(); 3 console.log(values);// [5, 4, 3, 2, 1]
b.
排序:sort();默认情况下是升序排列;为了实现排序,sort()方法会调用每个数组项的toString()方法,然后比较得到的字符串;以确定如何排序;即使数组中每一项是数组,得到的也是字符串排序;但是sort()党法可以接收一个比较函数作为参数,以便我们指定哪一个值位于前面;
比较函数接收两个参数,如果第一个参数应该位于第二个参数前面,返回一个负数,如果两个参数相等返回0;如果位于后面,返回正数;
1 function compare(value1,value2){ 2 if(value1<value2){ 3 return -1; 4 }else if(value1>value2){ 5 return 1; 6 }else{ 7 return 0; 8 } 9 } 10 var value=[0,1,3,5,2,8]; 11 value.sort(compare); 12 console.log(value);// [0, 1, 2, 3, 5, 8];只要交换比较函数的比较返回值1,-1,就可以调换排序顺序;
c.对于数值类型或者其valueOf()方法会返回数值类型的对象类型,可以使用一个更简单的比较函数,这个函数只要用第二个值减去第一个值即可;如果用 return value2-value1;得到的是相反的顺序;
1 <script> 2 function compare(value1,value2){ 3 return value1-value2; 4 } 5 var value=[0,9,3,5,2,8]; 6 value.sort(compare); 7 console.log(value);// [0, 2, 3, 5, 8, 9]; 8 </script>
(7)数组的splice方法:
删除:splice(要删除第一项的位置,要删除的项数);splice(0,2);删除前两项;
插入:splice(起始位置,0,要插入的项);
替换:splice(起始位置,要删除的项,要插入的项);
(8)数组的迭代方法:
a.every():对数组中每一项运行给定函数,如果该函数对每一项都返回true,则返回true;
1 <script> 2 var numbers=[1,2,3,4,5,4,3,2,1]; 3 var everyResult=numbers.every(function(item,index,array){ 4 return (item>2); 5 }); 6 console.log(everyResult);//false 7 </script>
b.some()对数组中每一项运行给定函数,如果该函数对任(某)一项返回true,则返回true;
1 <script> 2 var numbers=[1,2,3,4,5,4,3,2,1]; 3 var someResult=numbers.some(function(item,index,array){ 4 return (item>2); 5 }); 6 console.log(someResult);//true 7 </script>
c.filter()对数组中每一项运行给定函数,返回该函数会返回true的项组成的数组;
1 <script> 2 var numbers=[1,2,3,4,5,4,3,2,1]; 3 var filterResult=numbers.filter(function(item,index,array){ 4 return (item>2); 5 }); 6 alert(filterResult);//3,4,5,4,3 7 </script>
d.map()对数组中每一项运行给定函数,返回每次函数调用的结果组成的数组;
1 <script> 2 var numbers=[1,2,3,4,5,4,3,2,1]; 3 var mapResult=numbers.map(function(item,index,array){ 4 return item*2; 5 }); 6 console.log(mapResult);//[2, 4, 6, 8, 10, 8, 6, 4, 2] 7 </script>
e.forEach()只是对数组中的每一项运行传入的函数,这个方法没有返回值,本质上与for循环一致;
1 <script> 2 var numbers=[1,2,3,4,5,4,3,2,1]; 3 numbers.forEach(function(item,index,array){ 4 // 执行某些操作 5 }) 6 </script>
8.数组的归并方法:
reduce()和reduceRight();
这两个方法都会迭代数组的所有项,最后构建一个最终返回的值;
该方法接收两个参数reduce(每一项上调用的函数,(可选)作为归并基础的初始值);
函数参数;function(前一个值,当前值,项的索引,数组对象);
1 <script> 2 var values=[1,2,3,4,5]; 3 var sum=values.reduce(function(prev,cur,index,array){ 4 return prev+cur; 5 }); 6 console.log(sum);//15 7 </script> 8 reduceRight()//是从后向前迭代;
9.小计:
1 var colors=['red','blue','yellow']; 2 colors[colors.length]='black'; 3 colors[99]='green'; 4 alert(colors.length);//100; 5 if(Array.isArray(value)){};