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) 反正切
相关文章