学习Js-day05
今天的主要内容为数组和排序😄
数组我们首先想到数据结构中,数据的结构,逻辑结构,存储结构和算法,存储结构分为线性结构(数组,队列,栈,堆,链表)和非线性结构(树,图,hash(散列表)),其中只要能存储数据的结构,就一定具有增删检查的方法,将数据存放在一起,我们就使用了数组。🥰
数组:固定一类数据的组合(一般情况下我们数组里面的数据类型一致(包含多个数据))
数组的声明(引用数据类型):
1.使用[]声明数组,以 ,分隔
2.使用new 关键词进行声明(对象)
var arr = new Array(10) 里面的参数指定对应的长度,如果没写,表示长度为0
3.length属性来访问对应的长度
var arr = [1,2,3]//第一种声明
console.log(arr); //3 [1,2,3]
var arr1 = new Array(10)//10个空间 第二种声明
console.log(arr1[0])//undefined
//通过length来访问数组的长度
console.log(arr.length);//3
// 通过下标来访问对应数组的元素
// 数组遍历操作
// 数组的核心,其实就是一个顺序表,对应依赖下标来实现
for(var i = 0;i<arr.length;i++){
console.log(arr[i]);
}
<script>
var arr = [1,2,3]//第一种声明
console.log(arr); //3 [1,2,3]
var arr1 = new Array(10)//10个空间 第二种声明
var arr2 = new Array(1,2,3,4); //当前数组里有1,2,3,4,
console.log(arr1[0])//undefined
console.log(arr2.length);//4
console.log(arr.length);//3
for(var i = 0;i<arr.length;i++){
console.log(arr[i]);
}
console.log(arr['0']);//1 可以允许字符串
console.log(arr[0]);//1
arr[0] = 10;
console.log(arr[0]);//给数组赋值
</script>
数组的方法:增删插减
<script>
// 栈方法 :将内容追加到最后面
// push方法(添加到最后一个)
var arr = [1]
arr.push(10)
console.log(arr); //[1, 10]
// 队列方法:先进先出 将内容追加到最前面
// unshift方法 (添加到第一个
var arr = [1]
arr.unshift(10)
console.log(arr); //[10, 1]
// 删除 delete(不可还原 remove(可还原
// 栈方法 pop方法 删最后面一个
var arr = [1,2,3]
arr.pop()
console.log(arr); // [1, 2]
// 队列方法 shift方法 删第一个
var arr = [1,2,3]
arr.shift()
console.log(arr); // [2, 3]
// 修改 replace替换 update更新
// 反转reverse将最后一个变到第一个
var arr = [1,2,3,4,8]
arr.reverse()//返回一个数组 反转后的数组
//console.log(arr.reverse()); //[8, 4, 3, 2, 1]
console.log(arr); //[8, 4, 3, 2, 1]
/* var arr1=arr.reverse();
arr1.unshift(10);
console.log(arr); */
// 排序sort 默认情况下根据首字母的ASCII码排序,先比第一个再比第二个
var arr = [1,2,5,3,4,5]
arr.sort() //返回一个排列好的数组
// console.log(arr.sort());
console.log(arr);
// sort 其实是一个高阶函数 高阶函数就是一个函数作为参数的函数
var arr3 = [15,20,11,4,5]
arr3.sort(function(a,b){
// 1 和 -1 来进行大小区分和排序规则
// return a-b 正序
// return b-a 倒序
})
console.log(arr3);
</script>
<script>
// 栈方法
var arr = [1,2,3]
arr.push(10)
console.log(arr.push(10));
console.log(arr); //[1, 2, 3, 10]
arr.pop()
console.log(arr.pop());
console.log(arr); //[1, 2, 3] 对应的返回值就是被删的那个值
</script>
<script>
var arr = [4,5,6]
console.log(arr.unshift(10));
console.log(arr);
console.log(arr.shift());
console.log(arr);
</script>
<script>
// concat连接
// slice截取
</script>
<script>
// 不会影响原本数组的方法 返回新的数组
var arr =[1,2,3,4];
var arr1 =[1,2,3,4];
var arr2 =[1,2,3,4];
// concat 连接 把多个数组变成一个数组 返回 扩展运算符 打开数组取出里面的值
var newArr = arr.concat(arr1,arr2)
console.log(newArr);
// slice 切片 把一个数组里面的东西提出 返回新的数组
var sliceArr = arr.slice()//全切出
console.log(sliceArr);
var sliceArr1 = arr.slice(0)//从0开始切到最后 下标不存在就会返回空数组 例如4
console.log(sliceArr1);
var sliceArr2 = arr.slice(0,1)//不包含结束的下标 包含开始的下标
console.log(sliceArr2);
// concat方法slice方法返回的数组跟原本的数组不是一个对象,但是里面的值或者对象的地址是一样的
var obj ={name:'jack'}
var objArr = [obj]
var objArr1 = objArr.concat()
var objArr2 = objArr.slice()
console.log(objArr[0].name);//jack
objArr1[0].name = 'tom' //给name赋值
console.log(objArr2[0].name);//tom
console.log(objArr[0].name);//tom
</script>
<script>
// splice会影响之前的数组 删除,截取,插入
var arr = [12,13,45]
// 参数 开始位置 删除的个数(可以不写 默认就是数组的length
// var newArr = arr.splice(0) //从第一个开始删
// console.log(newArr);
// console.log(arr);
var newArr = arr.splice(1,2)
console.log(newArr);//[13, 45] 删除的内容
console.log(arr);//[12] 删除后的结果
</script>
数组方法的练习:
<script>
// 求数组中元素的和
var arr = [1, 2, 3, 5]
var sum = 0
for (var value of arr) {
sum += value
}
console.log(sum);
// 交换位置
function reve(arr){
for (var i = 0; i < arr.length/2; i++) {
var temp = arr[i]//接收原本的值
arr[i] = arr[arr.length-1-i]//将原本的位置的值用替换位置的值替换
arr[arr.length-1-i] = temp//将替换位置变成原本的值
}
}
console.log(arr);
// 求最大数
function maxNumber(arr){
var max = arr[0]
for(var i=1;i<arr.length;i++){
if(arr[i]>max){
max = arr[i]
}
}
return max;
}
console.log(minNumber(arr));
// 求最小数
function minNumber(arr){
var min = arr[0]
for(var i=1;i<arr.length;i++){
if(arr[i]<min){
min = arr[i]
}
}
return min;
}
console.log(minNumber(arr));
// 求最小数的下标
var arr = [1,2,34,58,9,5]
function minNumberIndex(arr){
var minIndex = 0
for(var i=1;i<arr.length;i++){
if(arr[i]<arr[minIndex]){
minIndex = i
}
}
return minIndex
}
console.log(minNumberIndex(arr));
</script>
排序算法!!!
常见的排序:
冒泡排序 基础排序
选择排序 选择最大值或者最小值进行比较的排序
快速排序 在数据量不多(低于十万内)最快的 冒泡排序的进阶
希尔排序 插入排序的进阶
插入排序 插入数据的时候进行排序
归并排序 大数据排序的常用排序算法
<script>
// 冒泡排序
//两个for循环嵌套 第一个循环次数 相当于length-1 第二个每趟比较是递减
// 相邻的两个相比 j和j+1相比
function bubble(arr){
// 遍历数组
for(var i = 1;i<arr.length;i++){
// 判断对应没有比较的值
for(var j=0;j<=arr.length-i;j++){
// 相邻的两两比较
if(arr[j]>arr[j+1]){
// 换位置
var temp = arr[j];
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
}
return arr
}
var arr = [12,4,3,7,5,8,2]
console.log(bubble(arr));
</script>
<script>
// 选择排序
function select(arr){
// 遍历数组
for(var i = 0;i<arr.length;i++){
var min = i;//记录最小下标 默认当前的i
for(var j=i+1;j<arr.length;j++){//遍历后面的内容
if(arr[j]<arr[min]){
// 记录这个下标
min = j;
}
}
// 判断当前最小下标是否为开始的默认下标,不是就换位置
if(min!=i){
// 换位置
var temp = arr[min];
arr[min] = arr[i];
arr[i] = temp
}
}
return arr;
}
var arr = [12,8,9,3,5,2,7];
console.log(select(arr));
</script>
<script>
// 快速排序
function quick(arr){
if((arr.length<=1)){
return arr;
}
// 定义左边数组,右边数组 以及中间值 基数
var left = [],right = [] ,mid=arr[0]
// 遍历数组
for(var i = 1;i<arr.length;i++){
arr[i]>mid?right.push(arr[i]):left.push(arr[i])
}
return quick(left).concat([mid],quick(right))
}
var arr = [12,8,9,3,5,2,7];
console.log(quick(arr));
</script>
课前预习
<script>
var arr = [2, 3, 4, '绿箭侠', '黑寡妇'];
var arr2 = arr.splice(2, 1); //第一个参数代表我要开始截取的下标位置
//第二个参数截取的长度, 如果只有两个参数, 则表示删除操作
console.log(arr); //[2, 3, '绿箭侠', '黑寡妇']; 4
console.log(arr2); //4 1
</script>
<script>
// concat() : 追加数据, 创建一个新数组, 不改变原数组
var arr = [2, 3, 4, '绿箭侠', '黑寡妇'];
var arr2 = arr.concat('美队', '雷神');
console.log(arr); //5
console.log(arr2); //7
// slice() : 不修改原数组, 将原数组中的指定区域数据提取出来
var arr = [2, 3, 4, "绿巨人"];
var arr2 = arr.slice(1, 3); //并没有修改原数组,将原数组中的元素提取出来,生成新数组, 取的是下标在区域: [1,3)
console.log(arr); //4
console.log(arr2); //2 [3,4]
</script>
<script>
var colors = new Array("red", "blue", "green");
colors.length = 2;
console.log(colors[2]);//undefined
</script>
<script>
var arr = [2, 3, 4, '绿箭侠', '黑寡妇'];
var arr2 = arr.concat('美队', '雷神');
console.log(arr);
console.log(arr2);
</script>
1.<script>
var arr = [3,2,4,5,8,6,3,9];
var arr2 = arr.slice(3,6);
console.log(arr);
console.log(arr2); //[5, 8, 6]
</script>
2.<script>
var arr = [1,2,3,4,6,7,8];
arr.splice(4,0,5)
console.log(arr);
</script>
3.<script>
var arr = ["我","是","一","只","笨","鸟"];
arr.splice(4,1,'聪','明')
console.log(arr);
</script>
😁敲一天,敲得我膀子都是栓的😡

浙公网安备 33010602011771号