ECMAScript - 数组 & Math() 对象

1、数组

1.1 理解

数组也是对象(对象中特殊的结构)

  • 用于存储数据
  • 数据存储顺序是按顺序进行排列的
  • 存储的数据原则上讲是可以是任意类型;

1.2 创建

构造函数的写法:

  var colors = new Array('red','blue','green');

字面量: (常用)

  var colors = ['red', 'blue', 'green'];

1.3 length 属性

数组默认的属性,用于展示当前数组存储数据的长度。

  数组名.length;
  
  const array = [1, 2, 3]
  array.length // 3

直接增加不存在的下标:

  • 若前方存在空标,则用空值占用;(一般不这样用)

     

1.4 下标

  • 数组中每一个元素都对应一个下标,
  • 下标 从 0 开始依次增大。
  • 最后一个元素的下标 = 数组长度(length) - 1;
     

1.5 访问数组元素

  数组[下标];
  
  const array = [1, 2, 3]
  array[0] // 1

1.6 修改数组元素

  数组[下标] = '新值' //原值被覆盖
  
  const array =[1, 2, 3]
  array[1] = 4 // [1, 4, 3]

1.7 数组的方法(数组内置的方法)

1.7.1 push()

array.push(参数1);

  参数1:输入需要插入的元素
  向数组的末尾增加新元素。

1.7.2 pop()

array.pop();

  删除数组末尾的元素。

1.7.4 unshift()

array.unshift(元素);

 添加元素到数组的头部。

1.7.5 shift()

array.shift();

  删除数组头部元素。

1.7.6 splice()

array.splice(参数1,参数2,参数3);

  1、参数1:下标,参数2:删除长度,参数3:新增加元素
  2、可以在任意位置给数组添加或则删除元素。
  3、后面两个参数可以不写。

  //删除任意位置  任意长度
  colors.splice(1,1); //从下标1开始,删除一个;

  //新增
  colors.splice(1, 0, 'pink');    //从1开始,加入元素

  //替换
  colors.splice(1, 1, 'red');     //将原有位置的元素删除,并插入新元素

  //删除后,会导致数组长度变化,此时需要解决该问题。

1.7.7 slice()

array.slice();

  用于抽取当前数组元素中的一段元素,然后组成一个新的数组。
  var newColor = color.slice(2);  //从原数组中,下标为2的元素开始往后的所有元素抽取出来组成一个数组,原数组不会被影响。
  var newColors = color.slice();  //不给参数,相当于是复制原数组
  var newNumbe = numbe.slice(1, 2)    //从下标 1 开始截取元素,至从左往右开始计算的第 2 个值
  • start: 开始下标,包含;
  • end:结束下标,不包含,如果不给该值,就截取剩下所有的元素。
     

1.7.8 sort()

array.sort();
 

  • 对数组元素进行排序。

  • 字母类型数据,默认按首字母排序

  • 数值类型数据,默认按从左往右第一位开始,依次从小到大排序

  • 如果不加入参数的情况,默认按照字母升序,如果元素不是字符串的话,会调用 toString()方法将元素转为字符串
     

加参数 语法:

  array.sort(function(a, b) {
  	return 正负数;
  })
  • function : 可选,用来指定某种顺序进行排列的函数。
  • a 和 b 分别代表第一个、第二个用于比较的元素。
  • 如果 return 小于 0, 那么 a 排在 b 的前面;
  • 如果 return 等于 0, 那么 a 和 b 的位置保持不变;
  • 如果 return 大于 0, 那么 b 排在前面;
     

如果是数字的话,可以通过 a - b 判断大小

  arr.sort(function(a, b){
  	return a - b;   //升序
  }) 

  arr.sort(function(a, b){
  	return b - a;   //降序
  }) 

1.7.9 concat()

array.concat();

  • 合并两个或则多个数组,并返回新数组。
     

1.7.10 join()

array.join(参数);

  • 链接数组所有元素组成一个字符串。 //默认各元素之间通过','链接

 

  参数为:空字符串,则各元素直接链接;
  参数为:'=',则以参数链接各个元素;

1.7.11 indexOf()

array.indexOf(参数);

  • 从左往右开始找,到到第一个就停止查找;

  • 返回数组中第一个元素与指定相等的下标,如果找不到该元素,返回 -1.

 

  colors.indexOf('元素');     //查找到数组中 元素 后,返回元素的下标,若找不到,返回 -1.

1.7.12 lastIndexOf()

array.lastIndexOf();

  • 从左往右开始找,到到第一个就停止查找;
  • 返回数组中第一个元素与指定相等的下标,如果找不到该元素,返回 -1.

 

  colors.lastIndexOf('元素');     //擦找到数组中 元素 后,返回元素的下标,若找不到,返回 -1.

1.7.13 reverse()

array.reverse();

  • 颠倒数组中元素的排列顺序

 

1.7.14 Set()

Set ()

  • 是 Es6 中的第六个版本,新增加的数据结构,类似数组,但是没有重复元素.

  • Set 函数可以接收一个数组作为参数,用于初始化。

    var list = new Set();
    
  • list.add(‘a’); //add()添加元素

  • 通过使用 size 获取Set 长度

  • 删除 Set 中的元素:list.delete()删除 Set元素 不是下标;

  • 通过 has 查找 Set 中值,返回布尔值;

  • 通过 Clear 清除 Set 中的所有元素;

 

Set 遍历:

  // 由于 Set 结构没有键名, keys 和 values 行为一致。(属性和值相同)
           
  [...new Set(arr)]
           
  Set.Keys()		-->  返回所有的键名;

  Set.values()		-->  返回所有的键值;

2、遍历数组(循环)

2.1 for 循环

  for(var i = 0; i < arr.length; i++){
  	console.log(arr[i])
  }

2.2 for in 循环

遍历数组:

  const arr = ['jack', 'lily', 'tom', 'link']
  
  for(var i in arr){
  	console.log(i, arr[i]);
  	/*
  	 * 0 'jack'
  	 * 1 'lily'
  	 * 2 'tom'
  	 * 3 'link'
  	*/
  }

遍历对象:

  	// 对象.属性名 -- 这种方式属性名不能是变量
  	// 对象['属性名'] -- 该方法可以实现对象属性的动态查询
  	// i 是属性名
  	for(var i in obj){
  		console.log(i, obj[i]);
  	}

2.3 for of 循环

遍历数组:

  const arr = ['jack', 'lily', 'tom', 'link']
  for(let value of arr){
  	console.log(value); // 'jack', 'lily', 'tom', 'link'
  }

for in 循环与 for of 的区别:
 
for in 循环遍历的是数组的下标;
for of 循环遍历的是数组中的元素;
 

2.4 forEach

forEach(function(itme, index, array){})
在原数组中进行办理,并会改变原数组(不会返回新数组);

  • itme 数组元素。
  • index: 可选,该元素对应的下标;
  • array: 可选,遍历的数组本身;

2.5 map

map(function(itme, index, array){})
修改

  • 遍历数组,并且根据新的规则返回新数组
  • itme 数组元素。
  • index: 可选,该元素对应的下标;
  • array: 可选,遍历的数组本身;

 

  var newGoods = goods.map(function(item) {
  	//toFixed(2) 保留两位小数点
  	item.priceFormate = '¥' + (item.price / 100).toFixed(2); // 添加新属性
  	return item;
  });
  console.log(newGoods);

2.6 filter

filter(function(itme, index, array){})
筛选

  • 遍历数组,并且根据规则返回符合条件的元素组成新数组(返回新数组)。
  • 如果没有找到符合条件的就返回一个空数组;
  • itme 数组元素。
  • index: 可选,该元素对应的下标;
  • array: 可选,遍历的数组本身;

 

  var newGoods = goods.filter(function(item) {
  	// return item.price > 600000;
  	return item.count > 5;
  });

2.7 find

find(function(itme, index, array){})
查找

  • 遍历数组,返回数组中满足条件的第一个值。
  • 如果没有找到符合条件的就返回一个 undefined;
  • itme 数组元素。
  • index: 可选,该元素对应的下标;
  • array: 可选,遍历的数组本身;

 

  var newGoods = goods.find(function(item) {
  	return item.price > 900000;
  });

2.8 every

every(function(itme, index, array){})

  • 遍历数组,如果数组中,每个元素都满足条件,则返回 turen。
  • 如果没有找到符合条件的就返回一个空数组;
  • itme 数组元素。
  • index: 可选,该元素对应的下标;
  • array: 可选,遍历的数组本身;

 

2.9 some

some(function(itme, index, array){})

  • 遍历数组,如果数组中,只要有一个元素满足条件,则返回 turen。
  • 如果没有找到符合条件的就返回一个空数组;
  • itme 数组元素。
  • index: 可选,该元素对应的下标;
  • array: 可选,遍历的数组本身 。

3、排序(冒泡 & 选择)

3.1 冒泡排序

  • 比较相邻的两个元素,比较大小交换位置;

 

  console.time('冒泡排序:');
  for(let k = 0; k < arr.length - 1; k++){
  	for(let i = 0; i < arr.length - 1 - k; i++){
  		/*if(arr[i] > arr[i + 1]){
  			let tem = arr[i];
  			arr[i] = arr[i + 1];
  			arr[i + 1] = tem;
  		}*/
  		// es6 新写法
  		if(arr[i] > arr[i +1]){
  			[arr[i], arr[i + 1]] = [arr[i + 1], arr[i]]
  		}
  	}
  }
  console.timeEnd('冒泡排序:');
  console.log(arr);

3.2 选择排序

  • 在未排序的序列中,找到最小的,放在开始位置;
  • 再从剩余未排序元素中继续寻找较小的元素,然后放在已排序末尾。

 

  console.time('选择排序: ');
  for (let n = 0; n < arr.length - 1; n++) {
  	for (let j = n + 1; j < arr.length; j++) {
  		/*if (arr[n] > arr[j]) {
  			var tem2 = arr[n];
  			arr[n] = arr[j];
  			arr[j] = tem2;
  		}*/
  		if(arr[n] > arr[j]){
  			[arr[n], arr[j]] = [arr[j], arr[n]]
  		}
  	}
  }

  console.timeEnd('选择排序: ');
  console.log(arr);

4、Math() 对象

4.1 概念

  • 是一个内置对象,有很多方法,主要提供了一些常用的数学方法;

4.2 部分API

圆周率:

  • Math.PI (常量都是大写)
     

随机数:

  • Math.random() 得到 0 ~ 1 之间的数字

 

在指定范围内任意整数的公式:

  • Math.floor(Math.random() * (max - min + 1) + min)
     

四舍五入:

  • Math.round(参数1) 四舍五入
  • Math.floor(参数1) 去掉小数点
  • Math.ceil(参数1) 向上则取整
     

绝对值:

  • Math.abs(参数1) 绝对值
     

其他:

  • Math.max(参数1,参数2,参数3,…) // 返回最大值
  • Math.min(参数1,参数2,参数3,…) // 返回最大值
  • Math.min(…[数组]) 返回最大值 //使用数组时,使用 … es6 的展开符号
  • math.pow(参数1,参数2) // 参数1 的 参数2 次幂
  • math.log(参数1) // 返回 参数1 的自然对数
     

三角函数:

  • Math.sign(x) 返回一个数的符号( + - 0 符号)
  • Math.sin(x) 正弦
  • Math.cos(x) 余弦
  • Math.acos(x) 反余弦
  • Math.asin(x) 反正弦
  • Math.tan(x) 正切
  • Math.atan(x) 反正切

相关文章


在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只 小网虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值