JS学习笔记——基础知识总结(数组)

这篇博客总结了JavaScript中数组的基础概念,包括创建、改变、遍历和排序方法。详细介绍了数组的length属性、常用方法如push、pop、reverse和sort,以及如何进行冒泡排序和选择排序。此外,还涉及到了一些ES5新增的数组方法,如indexOf、forEach和map,并提供了练习题以加深理解。
摘要由CSDN通过智能技术生成

前言

鉴于本人还处于学习阶段,以下内容为个人理解所做笔记,可能存在一定错误,如果能指出错误之处感激不尽,希望能与大家共同进步。

一、数组(array)概念

数组就是数据的集合,类似对象,只不过里面存储的是数据而不是变量名
1)长度:表示数组内有多少个数据,使用【变量名.length】可以查看数组长度。查看长度:consoel.log(arr.length)
2)索引(下标):表示数据在数组内处于第几个位置
(所有语言中索引计数都是从0开始,即第一个索引为0,最后一个索引为 arr.length - 1)
arr[0]:表示arr这个数组第一位的数据
arr[n]:表示arr这个数组第n位的数据
arr[arr.length - 1]表示arr这个数组最后一位数据

二、常用数组方法

1、创建一个数组

1)直接使用字面量 [ ]:这就代表着一个空数组
var arr_1 = [ ] arr_1 为空数组
var arr_2 = [1,2,“三”,true ] arr_2为有数据的数组
2)使用内置构造函数 new Array();
var arr_3 = new Array(); arr_3为空数组
var arr_4 = new Array(10); arr_4为10位数组
var arr_5 = new Array(1,2,3,4) arr_5为有数据数组

2、改变一个数组的值

如果是按照基础数据类型那种更改数值的方法直接赋值,那会开辟一个新的地址来存储新的数据,而不是在原地址中修改数据
1)变量.push(4):在最末尾添加一个元素4
返回值为新数组长度
2)变量.pop():删除最末尾的一个元素
返回值为被删除的元素
3)变量.unshift(0):在最前面添加一个元素0
返回值为新数组长度
4)变量.shift():删除最前面的一个元素
返回值为被删除的元素
5)变量.splice(开始的索引位置,截取多少个(为0则可以添加元素),替换的元素(不写则删除原元素)):按照索引截取数组中的某些内容
返回值是被删除的元素的集合

3、反转一个数组的值

变量.reverse

4、对数组排序

变量.sort():对数组内部数据进行排序,排序方法可以自己制定
参数需要一个描述排序规则的函数和一个比较两个数值的函数
规则函数
比较函数:返回值表明比较的两个数a,b之间的大小顺序
以从小到大为例:
a<b 返回负数
a== b 返回0
a>b 返回正数
以上可以简化为return a-b,从大到小为return b-a即
//从小到大排序
arr.sort(function(a,b)){
return a-b
}
//从大到小排序
arr.sort(function(a,b)){
return b-a
}

5、拼接多个数组

变量.concat(arr2或[数据,数据,数据]):不改变原数组,而是返回拼接好的新数组

6、链接数组每一个值

变量.join(’‘链接符’‘):不改变原数组,返回值为链接好的字符串,默认链接符为,可以自定义

7、具有一定兼容问题的方法

之前介绍的几个方法都是较早推出的ES3方法兼容性较好,接下来介绍的几个方法需要考虑到兼容问题

(一)ES5数组常用方法

1)indexOf:用来找到数组中某一项的索引,从前开始查找
语法:变量.indexOf(需要寻找的数组元素)
返回值:有返回索引,没有返回-1
2)lastIndexOf:用来找到数组中某一项的索引,从后开始查找
语法:变量.indexOf(需要寻找的数组元素)
返回值:有返回索引,没有返回-1
3)forEach:用来遍历数组,遍历每一个元素都会执行一次函数function(item,index)
语法:变量.forEach(function(item,index)){
}
item:遍历到的数组元素
index:对应的索引
4)map:用来遍历数组,可以对每一项进行操作,并返回一个新的数组
语法:变量.map(function(item,index)){
对item的操作
return item;
}
5)filter:按照制定的条件对数组进行筛选,筛选出满足条件的组成新的数组并返回
语法:变量.filter(function(item,index)){
对item的操作
return item;
}
每次循环都有返回值,不设置则默认为undefined,返回值会转为boolean型数据,为ture符合条件会放到新数组中,false不符合条件

三、数组的遍历

因为可以按照索引去获取数组内容,数组索引又是按0-n的顺序排列,所以可以通过for循环按顺序输出数组内数据,这种按顺序输出每一个数据叫做遍历。
通过for循环打印数组
for(var i=0;i<arr.length;i++){
console.log(arr[i])
}

四、数组排序

1、冒泡排序

(从小到大冒泡)原理:遍历数组,比较数组(n位)内相邻的两个数据大小,如果前一个大于后一个两者交换位置,第一次遍历(n-1次)最大的数将移动到数组最后一个位置,第二次遍历(n-2次)第二大的数将移动到数组倒数第二个位置,第i次遍历(n-i次)第i大的数将移动到数组倒数第i个位置。
格式

for(var j=0;j<arr.length-1;j++){
	for(var i = 0;i < arr.length-j-1;i++){
		if(arr[minIndex]>arr[i]){
			var temp = arr[i];
			arr[i] = arr[i+1]
			arr[i+1] = temp
	}
}

2、选择排序

原理:假定第0个就是最小数字对应的索引,遍历数组,只要有比第0个数字小的就将0替换为当前数字对应的索引,遍历结束就能找到最小数对应的索引n,最后将arr[0]与arr[n]对换;依次对第1、2、……、n进行选择排序,最后得到的数组内数据就是按从小到大排序的
格式

for(var i = 0;i < arr.length-1;i++){
	var minIndex = i
	for(var j = i+1;j < arr.length; j++){
		if(arr[minIndex]>arr[i]){
			minIndex = i
		}
	}
	var temp = arr[i];
	arr[i] = arr[minIndex]
	arr[minIndex] = temp
}

五、练习题

以下练习题均为本人培训过程中老师当天布置的练习题,对理解数组有很大的帮助,我会将个人的解题代码放置最后,个人水平有限仅供参考

强化练习1

  1. 定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。试编程。

    var arr = [2, 4, 6, 8, ..., 60]
    
    // 结果是一个新的数组
    // [6, 16, 26, 36, 46, 56]
    
  2. 通过循环按执行顺序,做一个5×5的二维数组,赋1到25的自然数,然后输出该数组的左下半三角。试编程。

    // 结果
    [
      [1, 2, 3, 4, 5],
      [6, 7, 8, 9, 10],
      [11, 12, 13, 14, 15],
      [16, 17, 18, 19, 20],
      [21, 22, 23, 24, 25]
    ]
    

强化练习2

  1. 随机生成一个五位以内的数,然后输出该数共有多少位,每位分别是什么

  2. 数组的冒泡排序

  3. 数组的选择排序

  4. 编写函数map(arr) 把数组中的每一位数字都增加30%,并返回一个新数组

    var arr = [10, 100, 1000]
    
    function map() {
      // code in here ...
    }
    
    console.log(map(arr)) // [13, 130, 1300]
    
  5. 编写函数has(arr , 60) 判断数组中是否存在60这个元素,返回布尔类型

 var arr = [1, 2, 3, 60]
 var arr2 = [1, 2, 3]
 
 function has() {
   // code in here ...
 }
 
 console.log(has(arr, 60)) // true
 console.log(has(arr2, 60)) // false

强化练习3

  1. 编写函数norepeat(arr) 将数组的重复元素去掉,并返回新的数组

    var arr = [1, 1, 2, 3, 4, 4, 2, 1, 3, 5]
    
    function norepeat() {
      // code in here ...
    }
    
    console.log(norepeat(arr)) // [1, 2, 3, 4, 5]
    
  2. 有一个从小到大排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

  3. 创建一个对象,该对象存储一个学生的信息,该对象包含学号、身份证、年龄、性别、所学专业等属性信息,同时该对象包含一个自我介绍的方法,用来输出该对象的所有信息

// 强化练习1
// 1 定义长度30的数组,每五个求平均数存储到另一个数组中
function arr_defin(){
   
	var arr = [30]
	var arr_ave = []
	var k = 0
	for(i=0;i<30;i++){
   
		arr[i]=2*(i+1)
		if((i+1)%5 == 0){
   
			var sum = 0
			for(j=i-4;j<=i;j++){
   
				sum += arr[j]
			}
			arr_ave[k] = sum/5
			k ++
		}
	}
	console.log(arr)
	console.log(arr_ave)
}


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值