冒泡排序 把元素按顺序排列
思路:遍历数组,第一个元素依次跟后面的元素比较,如果比较的元素比他小,则换位置,如果遇到的元素比他大,则不动,大的元素跟后面的元素比较,从第0个元素开始比较,第一轮比较了length - 1次,得到了一个最大的数,从第1个元素开始比较,第二轮比较了length - 1 - i次,得到了第二大的数字,以此类推
<script>
var arr = [6,5,3,1,8,7,2,4];
for(i = 0; i < arr.length - 1; i++){
for(j = 0; j < arr.length - 1 - i; j++){
if(arr[j] > arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
console.log(arr);
</script>
注意:
- 思考对比的顺序,次数,每个数比较几次
- 两层for循环里,i和j的关系怎么表达
- 交换两个元素的方法
8.多维数组
数组里面套数组
应用场景:电商网站价格升序降序;前后台传递数据不可以传递汉字,使用数组代替
-
二维数组 两层数组嵌套
<script> var arr = [[1,2][3,4][5,6]]; console.log(arr[0][0]); //输出arr里的第0个元素([12])里的第0个元素(1) console.log(arr[1][1]); //输出arr里的第1个元素([34])里的第1个元素(4) </script>
-
三维数组 三层数组嵌套
<script> var arr = [[[1,2][3,4][5,6]]]; console.log(arr[0][0][0]); //输出arr里的第0个元素[[12][34][56]]里的第0个元素[12]里的第0个元素1 </script>
9.数组方法
-
对原数组有影响
-
push 从末尾增 等于arr[arr.length] = ‘添加的元素’;
push对原数组有影响,操作的是当前调用的数组
<script> var arr = [1,2,3,4,5]; // 在末尾添加一个元素,多个元素,数组 var newArr = arr.push(6); var newArr = arr.push(7,8,9); var newArr = arr.push(['张三','李四','王五']); // 返回的是添加后的数组的length console.log(newArr); // 打印数组返回的是添加元素后的原数组 console.log(arr); </script>
-
pop 从末尾删 等于arr.length–;
pop对原数组有影响<script> var arr = [1,2,3,4,5]; // 从末尾删除一个元素 var newArr = arr.pop(); // 返回结果是被删除的那个元素 console.log(newArr); // 打印数组返回的是删除后的原数组 console.log(arr); </script>
3. unshift 从头部增 等于for(i = arr.length; i >= 0; i++){ arr[i] = arr[i-1] } unshift对原数组有影响
-
<script>
var arr = [1,2,3,4,5];
// 从头部增加一个元素,多个元素,数组
var newArr = arr.unshift(0);
var newArr = arr.unshift(5,4,3,2,1);
var newArr = arr.unshift([6,7,8,9]);
// 返回的是增加后数组的长度
console.log(newArr);
// 打印数组返回的是增加后的原数组
console.log(arr);
</script>
4. shift 从头部删
等于for(i = 0; i < arr.length - 1; i++){
arr[i] = arr[i+1];
}
shift对原数组有影响
<script>
var arr = [1,2,3,4,5];
// 删除头部的数据
var newArr = arr.shift();
// 返回结果是被删除的那个元素
console.log(newArr);
// 打印数组返回的是删除后的原数组
console.log(arr);
</script>
-
splice 增删改一体化
对原数组有影响
- 一个参数
<script> var arr = [1,2,3,4,5]; // 一个参数代表保留几个元素,剩下的都删除掉 var newArr = arr.splice(2); // 如果参数超过数组长度,那么就保留所有元素 var newArr = arr.splice(30); // 返回的结果是删除的元素组成的数组 console.log(newArr); // 打印数组返回的是删除后的新数组 console.log(arr); </script>
- 两个参数
<script> // 两个参数代表删除,第一个参数代表从哪开始(下标),第二个参数代表删除几个 // 对原数组有影响 var arr = [1,2,3,4,5,6,7,8,9]; // 两个参数,代表从下标是1的元素开始,删除3个 var newArr = arr.splice(1,3); // 返回的结果是被删除的元素组成的数组 console.log(newArr); // 返回的结果是删除后的新数组 console.log(arr); </script>
- 多个参数
增加
<script> // 多个参数,第一个参数代表从哪开始(下标);第二个参数代表删除几个,第三个参数往后代表新增的元素 var arr = [1,2,3,4,5,6,7,8,9]; // 多个参数,代表从下标是2的元素开始,删除0个,添加'a','张三',996三个元素 var newArr = arr.splice(2,0,'a','张三',996); // 返回的结果是被删除的元素,第二个参数是0则代表删除0个元素,返回的是没有内容 console.log(newArr); // 打印的结果是增加后的原数组 console.log(arr); </script>
修改
<script> var arr = [1,2,3,4,5,6,7,8,9]; // 多个参数,代表从下标是3的元素开始,删除2个元素,添加'修改','再改'两个元素 var newArr = arr.splice(3,2,'修改','再改'); // 返回的结果是被删除的元素,从下标是3的元素开始,删除2个元素,返回4,5 console.log(newArr); console.log(arr); </script>
是添加,还是修改,这取决于第二个参数,如果第二个参数是0,则代表没有删除元素,第三个元素以及后面的元素就是添加上了;如果第二个参数是别的数字,则代表删除了相应个数的元素,第三个参数以及后面你的从参数都是替换上去的修改的元素
-
reverse 翻转数组
对原数组有影响
<script> var arr = [1,2,3,4,5]; // reverse后面的括号内没有内容 var newArr = arr.reverse(); // 返回的结果是翻转后的数组 console.log(newArr); // 打印的结果是翻转后的原数组 console.log(arr); </script>
-
sort 排序,默认情况下比较的是ascii码,按升序排序
对原数组有影响
<script>
var arr = [6,5,8,7,3,1,2,4];
// sort后面的括号没有内容
var newArr = arr.sort();
// 返回的值是排序后的数组
console.log(newArr);
// 打印的结果是排序后的数组
console.log(arr);
</script>
按ascii码,升序排序
<script>
var arr = ['2313123','2131423412'];
var newArr = arr.sort();
console.log(newArr);
console.log(arr);
</script>
-
对原数组没有影响
-
join 用指定的字符串,把数组中的元素拼接成一个字符串,但是最终输出的是字符串
对原数组没有影响<script> var arr = [1,2,3,4,5,6]; // 用字符串#把元素链接起来,拼接成一个新的字符串 var newArr = arr.join('#'); // 返回的值为1#2#3#4#5#6 console.log(newArr); // 打印结果还是原数组,不受影响 console.log(arr); </script>
如果join后面的括号内没有标明用什么来拼接,则默认是用逗号拼接
<script> var arr = [1,2,3,4,5,6]; // 默认用逗号拼接 var newArr = arr.join(); // 返回的值为1,2,3,4,5,6 console.log(newArr); // 打印结果还是原数组,不受影响 console.log(arr); </script>
如果join后面的括号内是空字符串,那就没有任何连接,直接拼接,但是最终输出的是字符串
<script> var arr = [1,2,3,4,5,6]; // 没有拼接的字符串 var newArr = arr.join(''); // 返回的值为123456 console.log(newArr); // 打印结果还是原数组,不受影响 console.log(arr); </script>
应用场景:前后端互相传递数据时,使用的是数组则不允许传递,解决策略是使用join方法拼接成字符串,然后就可以传递了
-
concat 拼接一个值
对原数组没有影响-
拼接一个元素
<script> var arr = [1,2,3]; // 在数组后面拼接一个元素 var newArr = arr.concat(4); // 打印结果为1,2,3,4 console.log(newArr); // 打印结果还是原数组,不受影响 console.log(arr); </script>
-
拼接多个元素
<script> var arr = [1,2,3]; // 在数组后面拼接一个元素 var newArr = arr.concat(4,5,6); // 打印结果为1,2,3,4,5,6 console.log(newArr); // 打印结果还是原数组,不受影响 console.log(arr); </script>
-
拼接数组
<script> var arr = [1,2,3]; // 在数组后面拼接一个元素 var newArr = arr.concat([4,5,6]); // 打印结果为1,2,3,4,5,6;把原数组拆了,添加进去 console.log(newArr); // 打印结果还是原数组,不受影响 console.log(arr); </script>
-
-
slice 截取数据
截取数据,左闭右开,(下标)从第一个参数开始截取,包含这个参数,到第二个参数截止,不包含第二个参数-
两个参数
<script> var arr = [1,2,3,4,5]; // 从下标为1的元素开始截取,包含下标为1的元素,到下标为3的元素截止,不包含下标为3的元素 var newArr = arr.slice(1,3); // 返回的结果是截取到的元素 console.log(newArr); // 打印结果还是原数组,不受影响 console.log(arr); </script>
-
一个参数
<script> var arr = [1,2,3,4,5]; // 如果只有一个值,代表的是开始的值,直到结束 var newArr = arr.slice(2); // 打印结果为从下标是2的元素开始,一直截取到最后一个元素 console.log(newArr); // 打印结果还是原数组,不受影响 console.log(arr); </script>
-
-
valueOf 将Object数据类型转换为基本数据类型
<script> var arr = [1,2,3,4,5]; console.log(typeof arr); var newArr = arr.valueOf(); console.log(typeof newArr); // 打印结果还是原数组,不受影响 console.log(arr); console.log(typeof newArr); console.log(arr == newArr); </script>
-
tostring 把数组变成字符串
<script> var arr = [1,2,3,4,5]; // 把数组转换成字符串 var newArr = arr.toString(); // 输出结果为1,2,3,4,5(字符串类型) console.log(newArr); // 打印结果还是原数组,不受影响 console.log(arr); </script>
-