JavaScript Array对象使用方法解析(2)

<script> var lis = document.getElementsByTagName('li') // 伪数组,不能使用foreach() console.log(lis) // HTMLCollection(4) [li.test, li.test, li.test, li.test] // 已经转化为数组,但是是个空数组,依然无法遍历 console.log(Array.prototype.slice(lis)) // [] // 已经转化为数组,且可以遍历 console.log(Array.from(lis)) // [li.test, li.test, li.test, li.test] Array.from(lis).forEach(function(item){ console.log(item.innerHTML) }) </script>

6.数组排序

1.插入排序

从第二个元素开始,拿他前面的元素与它比较,如果它比前面的元素小,则这个对比元素往后挪一个位置(实际上是arr[p + 1] = arr[p]),接着往左边找对比元素左比较,直到找到最后一个或者比它小的元素位置为止,此时将这个元素放到这个相应的位置(arr[p + 1] = temp),每轮循环结束都能保证前面的数据是升序排列的

<script> var arr = [6, 3, 4, 7, 5, 19, 2]; var length = arr.length; // 进行升序排列,大的元素往右边挤,小的元素往左边挤 for (var i = 1; i < length; i++) { // i为当前元素的下标 var temp = arr[i]; // p为比对元素的下标 p = i - 1; // 如果当前元素比目标元素小 while (p >= 0 && temp < arr[p]) { // 将比对元素往右挪一个位置 arr[p + 1] = arr[p]; // 往左一个位置找新的比对元素 p--; } // 将当前元素放到合适的位置 arr[p + 1] = temp; } console.log(arr) // [2, 3, 4, 5, 6, 7, 19] </script>

2.快速排序

将一个数组的中间元素取出(splice,这个方法会改变原数组,同时将将截取的元素以数字的形式返回),然后定义两个左右空数据,遍历这个原数组,将小于被取出元素值的元素放入左边的数组,反之放入右边的数组,一轮循环之后将这左右两个数组和中间元素拼接起来,同时对左右数组进行递归调用

var arr = [4, 3, 6, 7, 5, 19, 2]; var newArr = quickSort(arr); console.log(newArr); function quickSort(arr) { if (arr.length <= 1) return arr; else { var center = parseInt((arr.length - 1) / 2); var centerValue = arr.splice(center, 1)[0]; var left = []; var right = []; for (var i = 0; i < arr.length; i++) { if (arr[i] <= centerValue) { left.push(arr[i]); } else { right.push(arr[i]); } } return quickSort(left).concat(centerValue, quickSort(right)); } }

3.sort排序

<script> var arr = [ {name:"张三",age:18}, {name:"李四",age:16}, {name:"王五",age:10}, {name:"赵六",age:22} ] arr.sort(function(p1,p2){ //p1.age-p2.age就是升序 //p2.age-p1.age就是降序 return p1.age-p2.age }) console.log(arr) // [{name: "王五", age: 10} // {name: "李四", age: 16} // {name: "张三", age: 18} // {name: "赵六", age: 22}] </script>

7.其他方法

数组反转 reverse() 将当前数组反转,会改变当前数组

<script> var arr = [1,2,3,4] arr.reverse() console.log(arr) // [4, 3, 2, 1] </script>

剪接数组 splice() 会改变当前数组

可以删除任意数组元素,还可以向数组添加元素

语法:arr.splice(index,num,item1,item2...)

index:规定从何处添加/删除元素

num:删除多少元素

后面的参数可以是0个也可以是多个,表示要添加的数组元素

<script> var arr = [1,2,3,4] // 在下标3的位置添加数组元素 arr.splice(3,0,5) console.log(arr) // [1, 2, 3, 5, 4] // 删除下标为1的数组元素 arr.splice(1,1) console.log(arr) // [1, 3, 5, 4] // 从下标1的位置开始删除3个元素,并添加2个元素 arr.splice(1,3,"life","good") console.log(arr) // [1, "life", "good"] </script>

数组剪切 slice() 根据给定的下标,将两个下标之间的元素以数组形式返回,不会改变原数组

语法:arr.slice(n,m) 将arr[n]到arr[m-1]之间的元素以数组形式返回

<script> var arr = [1,2,3,4] // 不包含参数二对象的下标元素 var newArr = arr.slice(1,3) console.log(newArr) // [2, 3] // 默认剪切到最后一个元素 var newArr2 = arr.slice(1) console.log(newArr2) //[2, 3, 4] // 可接受负数 var newArr3 = arr.slice(0,-1) console.log(newArr3) //[1, 2, 3] </script>

拼接2个数组 concat()

不会改变原数组,而是将拼接后的新数组返回

<script> var arr = [1,2,3,4] var arr2 = [5,6,7,8] var newArr = arr.concat(arr2) console.log(arr) // [1,2,3,4] console.log(arr2) // [5,6,7,8] console.log(newArr) // [1, 2, 3, 4, 5, 6, 7, 8] </script>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/5ddad5ca13ad9a3d2b366f378047faa9.html