javascript中Array相关的属性和方法
欢迎访问我的博客 ,祝码农同胞们早日走上人生巅峰,迎娶白富美~~~
Array 对象属性
constructor : 返回对创建此对象的数组函数的引用
1 2 3 4 var test=new Array ()if (test.constructor==Array ){ document .write("This is an Array" ) }
length 设置或返回数组中元素的数目。
prototype 可以向构造函数的原型对象添加属性和方法
Array对象方法
concat()
连接两个或更多的数组,并返回结果
1 2 3 4 var arr = [1 ,2 ,3 ,4 ];var arr2 = [5 ,6 ,7 ,8 ];var arr3 = arr.concat(arr2);console .log(arr3);
join()
把数组的所有元素放入一个字符串,元素通过指定的分隔符进行分隔
1 2 3 var arr = ['xiao' ,'lin' ,'qiqi' ,'mingtian' ];var arr2 = arr.join(',' );console .log(arr2);
pop()
删除并返回数组的最后一个元素
1 2 3 4 var arr = [2 ,3 ,4 ,5 ];var arr2 = arr.pop();console .log(arr2); console .log(arr);
shift()
删除并返回数组的第一个元素
1 2 3 4 var arr = [2 ,3 ,4 ,5 ];var arr2 = arr.shift();console .log(arr2); console .log(arr);
push()
向数组的末尾添加一个或更多元素,并返回新的长度
1 2 3 4 var arr = [2 ,3 ,4 ,5 ];var arr2 = arr.push(6 );console .log(arr2); console .log(arr);
unshift()
向数组的开头添加一个或更多元素,并返回新的长度
1 2 3 4 var arr = ['xiao' ,'ming' ,'qiqi' ,'aiming' ];var arr1 = arr.unshift('lang' );console .log(arr1); console .log(arr);
reverse()
颠倒数组中元素的顺序
1 2 3 var arr = [2 ,3 ,4 ,5 ];arr.reverse(); console .log(arr);
slice()
从某个已有的数组返回选定的元素
1 2 3 4 var arr = [2 ,3 ,4 ,5 ];var arr2 = arr.slice(1 ,3 );console .log(arr2); console .log(arr);
sort()
对数组的元素进行排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 function sortNumber (a,b ) { return a - b } var arr = [23 ,30 ,42 ,5 ];var arr2 = arr.sort(sortNumber);console .log(arr2); console .log(arr); function sortNumber (a,b ) { return b - a } var arr = [23 ,30 ,42 ,5 ];var arr2 = arr.sort(sortNumber);console .log(arr2); console .log(arr);
splice()
删除元素,并向数组添加新元素。
1 2 3 4 5 6 7 8 9 var arr = [1 ,2 ,3 ,4 ];arr.splice(2 ,0 ,5 ); console .log(arr); var arr = [1 ,2 ,3 ,4 ];arr.splice(2 ,1 ,5 ); console .log(arr);
toSource()
返回该对象的源代码
1 2 3 4 5 6 7 8 9 10 11 12 <script type="text/javascript" > function employee (name,job,born ) { this .name=name; this .job=job; this .born=born; } var bill = new employee("Bill Gates" ,"Engineer" ,1985 );document .write(bill.toSource());</script> / / 输出:({name:"Bill Gates", job:"Engineer", born:1985})
toString()
把数组转换为字符串,并返回结果
1 2 3 var arr = ['xiao' ,'ming' ,'qiqi' ,'aiming' ];arr.toString(); console .log(arr);
toLocaleString()
把数组转换为本地数组,并返回结果
1 2 3 var arr = ['xiao' ,'ming' ,'qiqi' ,'aiming' ];arr.toLocaleString(); console .log(arr);
valueOf()
返回数组对象的原始值
1 2 3 var arr = ['xiao' ,'ming' ,'qiqi' ,'aiming' ];arr.valueOf('lang' ); console .log(arr);
Array部分方法实现
数组元素去重
方法一:
思路:
1. 定义一个 json 对象
2. 遍历数组,将 arr[i] 作为 json 的键
3. 若 不重复,则给对应 arr[i] 的键值为 1 作为后面判断的标识,并 push 到新数组 arr1 中,若重复,则删除
1 2 3 4 5 6 7 8 9 var arr = [1 , 2 , 3 , 2 , 1 , 5 , 6 , 3 , 3 , 2 , 1 , 7 , 9 , 8 ,6 ] var arr1 = [] var json = {} for (var i = 0 ; i < arr.length; i++) { if (!json[arr[i]]) { json[arr[i]] = 1 arr1.push(arr[i]) } }
方法二:
思路:
定义一个新数组 arr1 如果这个新数组中没有这个元素,则 push
1 2 3 4 5 6 7 var arr = [1 , 2 , 3 , 2 , 1 , 5 , 6 , 3 , 3 , 2 , 1 , 7 , 9 , 8 ,6 ] var arr1 = [] for (var i = 0 ; i < arr.length; i++) { if (arr1.indexOf(arr[i]) < 0 ) { arr1.push(arr[i]) } }
方法三:filter
filter
的接收回调,可以有多个参数回调可以接收三个参数,第一个是数组中的元素,第二个是位置,第三个是数组本身利用filter
过滤器,总是返回元素第一个位置 去除重复元素依靠的是indexOf
总是返回第一个元素的位置,后续的重复元素位置与indexOf
返回的位置不相等,因此被filter
滤掉了
1 2 3 4 5 var arr = [1 , 2 , 3 , 2 , 1 , 5 , 6 , 3 , 3 , 2 , 1 , 7 , 9 , 8 ,6 ] var arr1 = arr.filter(function (ele, index, self ) { return self.indexOf(ele) === index }) console .log(arr1)
数组最值
方法一:Math.max.apply
And Math.min.apply
1 2 3 4 5 6 7 方法一:Math .max.apply var iMax = 0 var iMin = 0 var arr = [1 , 268 , 5 , 4 , 9 , 0 , 68 ] iMax = Math .max.apply(null , arr) iMin = Math .min.apply(null , arr) console .log(iMax, iMin)
方法二::Math.max.call
And Math.min.call
1 2 3 4 5 6 var iMax = 0 var iMin = 0 var arr = [1 , 268 , 5 , 4 , 9 , 0 , 68 ] iMax = Math .max.call(null , 1 , 268 , 5 , 4 , 9 , 0 , 68 ) iMin = Math .min.call(null , 1 , 268 , 5 , 4 , 9 , 0 , 68 ) console .log(iMax, iMin)
方法三:循环比较
1 2 3 4 5 6 7 8 9 10 11 12 var iMax = 0 var iMin = 0 var arr = [1 , 268 , 5 , 4 , 9 , 0 , 68 ]for (var i = 0 ; i < arr.length; i++) { if (iMax < arr[i]) { iMax = arr[i] } if (iMin > arr[i]) { iMin = arr[i] } } console .log(iMax, iMin)
数组排序
sort
原理:在不带参数的情况下sort()方法默认会将数组元素当作string类型来升序排序,根据它们的unicode码从小到大依次排列,如果想按照自己的条件进行排序,需要传一个比较函数
1 2 3 4 5 6 7 8 9 10 11 var arr = [1 , 268 , 5 , 4 , 9 , 0 , 68 ] arr.sort(function (a, b ) { return a - b }) console .log(arr) arr.sort(function (a, b ) { return b - a }) console .log(arr)
冒泡排序
思路:每次比较相邻的两个数,如果后一个比前一个小,换位置。如果要实现由大到小排序,使用reverse()即可;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 var a = [1, 268, 5, 4, 9, 0, 68, 67, 69, 96, 14, 78, 100, 25, 42, 23, 32, 68, 89, 98, 1] var temp = 0 for (var i = 0; i < a.length; i++) { for (var j = 0; j < a.length - i; j++) { if (a[j] > a[j + 1]) { temp = a[j] a[j] = a[j + 1] a[j + 1] = temp } } } var b = a.reverse() console.log(a)
快速排序
思路:采用二分法,取出中间数,数组每次和中间数比较,小的放到左边,大的放到右边。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 var arr = [1 , 268 , 5 , 4 , 9 , 0 , 68 , 67 , 69 , 96 , 14 , 78 , 100 , 25 , 42 , 23 , 32 , 68 , 89 , 98 , 1 ]function quickSort (arr ) { if (arr.length == 0 ) { return []; } var arrL = [] var arrR = [] var index = Math .floor(arr.length / 2 ) var arrM = arr.splice(index, 1 ) for (var i = 0 ; i < arr.length; i++) { if (arrM > arr[i]) { arrL.push(arr[i]) } else { arrR.push(arr[i]) } } return quickSort(arrL).concat(arrM, quickSort(arrR)) } console .log(quickSort(arr))
数组翻转(非reverse)
方法一 :
删除数组最后一个元素并返回被删除的元素
1 2 3 4 5 6 7 8 var arr = [1 ,2 ,3 ,4 ];var arr2 = [];while (arr.length) { var num = arr.pop(); arr2.push(num); } console .log(arr2);
方法二 :
删除数组第一个元素并返回被删除的元素
1 2 3 4 5 6 7 var arr = [1 ,2 ,3 ,4 ];var arr2 = [];while (arr.length){ var num = arr.shift(); arr2.unshift(num); } console .log(arr2);