建网站的成本计算,网站建设 服务流程,广州网络营销岗位数量,html网页设计代码作业代码1.冒泡排序
冒泡排序是数组解构中的常见排序算法之一。规则如下#xff1a;先遍历数组#xff0c;让相邻的两个数据进行比较#xff0c;如果前一个比后一个大#xff0c;那么就把这两个数据交换位置#xff0c;经过一轮遍历之后#xff0c;最大的那个数字就排在数组最后…1.冒泡排序
冒泡排序是数组解构中的常见排序算法之一。规则如下先遍历数组让相邻的两个数据进行比较如果前一个比后一个大那么就把这两个数据交换位置经过一轮遍历之后最大的那个数字就排在数组最后的索引位置然后进行第二次遍历按照相同的规则最终将第二大的数字排在倒数第二的索引位置同理经过多次排序最终将数组按照从小到大的顺序进行展示认为规定是正向冒泡还是反向冒泡反向冒泡最终可以从大往小的顺序排序
代码实现
for(var j0;jarr.length; j){for(var i0;iarr.length;i){if(arr[i]arr[i1]){var tmparr[i]arr[i]arr[i1]arr[i1]tmp
}}}
代码优化思路
当进行第一次遍历时假设数组的长度为9那么排列8次就可以得到最大值所以在外层的循环可以优化为arr.length-1
在第一次遍历结束后已经找到了最大值并排列在最后的位置那么我们在第二次循环遍历时就不需要对比最后一个的最大值同理第三次不需要对比最后两个已经拍好的最大值等等。就会呈现一个规律内循环的遍历次数是外循环遍历次数-1比如外层为j那么内层就减少j-1.故内层循环中的结束条件可以优化为arr.length-1-j
故优化后的代码
for(var j0;jarr.length-1; j){for(var i0;iarr.length-1-j;i){if(arr[i]arr[i1]){var tmparr[i]arr[i]arr[i1]arr[i1]tmp
}}}
2.选择排序 3.数组常用方法
1arr.push() 从数组的末尾添加数据
2arr.pop()从数组的末尾删除数据
3arr.unshift()从数组的头部添加数据
4arr.shift()从数组的头部删除数据
5arr.splice(开始索引删除个数替换的数据1替换的数据2...) 删除并替换数组中的数据
6arr.slice开始索引结束索引包前不包后包括开始索引不包括结束索引截取数组
7arr.reverse()反转数组
8arr.concat()拼接数组
9arr.join()将数组转换成字符串并用括号中的内容进行拼接
10arr.indexOf(数据开始索引)查找数组从指定索引开始 正序
11arr.lastIndexOf(数据开始索引)查找数组从指定索引开始逆序
12arr.sort()排序数组默认以ASCII编码的方式进行排序
13arr.sort(a,b){return a-b}以递增的方式进行排序
14arr.sort(a,b){return b-a}以递减的方式进行排序
15arr.forEach(function(item,index,arr){})遍历数组
item:数组中的每一项
index:数组中的每一项的索引
arr:原数组
16arr.map(function(item,index,arr){return }) 映射数组以return的形式
17arr.filter(functionitem,index,arr{return})过滤数组将满足条件的数据以一个新数组的形式返回
18arr.some(function(item,index,arr){return})过滤数组返回结果为布尔值只要一个条件为真则为真全部为假则为假
19arr.every(function(item,index,arr){return})过滤数组返回结果为布尔值只要一个条件为假则为假全部为真则为真
20arr.find(functionitem,index,arr{return})过滤数组将满足条件的第一个数据返回
21arr.findIndex(function(item,index,arr){return})过滤数组将满足条件的第一个数据的索引返回
22arr.reduce(function(prev,item,index,arr){return},初始值)累加数组
4.数组去重
1排序让相同的元素挨着通过遍历删除相同的
arr.sort(function(a,b){ return a-b}) for(var i0;iarr.length-1;i){//判断当前的元素和后面的元素是否相等 如果相等就删除掉 if(arr[i]arr[i1]){arr.splice(i,1) //防止塌陷 i--}}
2利用双重for循环来实现
//循环遍历原数组 for(var i0; iarr.length-1; i){//再次循环 让前面的元素和后面的元素再次比较 for(var ji1; jarr.length-1; j){ if(arr[i]arr[j]){//如果后面还有相同的数字就删除掉 arr.splice(j,1) //防止坍塌 j--}}}
3接祖一个新数组以及数组的indexOf方法来实现
var newArr[] for(var i0;iarr.length-1;i){//判断新数组有没有原数组中的数据如果没有就添加进去if(newArr.indexOf(arr[i])-1){//添加元素到新数组中 newArr.push(arr[i])}}
4借助forEach来实现
arr.forEach(function(item){if (newArr.indexOf(item-1){newArr.push(item)})})
5直接判断元素数组检测当前元素后面有没有相同的元素有就删除掉
for (var i0;iarr.length; i){//拿到后面元素的索引 var indexarr.indexOf(arr[i],i1) //判断后面的元素是不是还有相同的 if(index! -1){//说明后面还有 arr.splice(i, 1) //放置塌陷 i--}}
6借助一个对象的特性来实现因为对象里面的键名不能重复
for(var i0; iarr.length; i){ var itemarr[i] // item 就是数组内的每一个数据 //把item当做key添加到对象内 obj[item]随便数据} //准备一个新的数组 var newArr[] //循环遍历对象 for( var k in obj){// 把每一个 k添加到 newArr里面 newArr.push(k-0)}
7借助Set构造函数
// Set是ES6里面的一个数据类型 //功能Set对象是值的集合你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次即Set中的元素是唯一的 var arr1new Set(arr) //返回的是个对象的结构 //把对象转化成数组 var arr2Array.from(arr1)
8通过ES6的扩展运算符来实现
var arr1new Set(arr) //通过ES6的一个新语法扩展运算符来实现 var result[...arr1]