数组对象
创建数组
数组可以存储任意数据类型的数据
存储方式分为字面量方式存储、构造函数方式存储
数据类型:5基1复
5基本:number、string、boolean、null、undefined
1复杂:object、function,array
var now = new Date(); //构造函数方式
var arr = new Array(); //构造函数方式
例如:
//1、字面量方式创建
var arr = [1,2,'s',[],{}];
console.log(arr);
//2、构造函数方式创建
var arr1 = new Array(1,2,3,4);
console.log(arr1);
//如果参数只有一个并且是number类型,这个参数表示创建数组的个数
var arr2 = new Array(4);
console.log(arr2);
//3、遍历数组
var arr3 = [1,2,3,4,5,6,7,8,9];
for(var i = 0;i<arr3.length;i++){
console.log(arr3[i]);
}
//和数组相关的split
var str = “2019-11-19”;
console.log(str.split(“-”,2))
数组方法:添加、删除
添加元素
push
:在数组的末尾添加元素,方法中可以传入多个值,值就是要添加的数组中的值,返回数组的总长度
unshift
:和push
方法方向相反,push
是在数组的末尾添加,unshift
是在数组的开头添加元素,返回数组的总长度
删除元素 无参数
pop
:在数组的末尾删除一个元素,该方法没有参数,返回被删除的元素
shift
:在数组的开头删除一个元素,返回被删除的元素,该方法没有参数
var arr = ['a','b','c','d'];
//1、push方法:参数可以有多个值,末尾添加元素
var n = arr.push('e','f');
console.log(n);//返回当前数组的长度
console.log(arr);
//2、pop方法:在末尾删除一个元素,没有参数
var del = arr.pop(); //返回被删除的元素
console.log(del);
console.log(arr);
//3、unshift方法:在头部添加元素
var cd = arr.unshift('g','h');
//shift 在头部删除一个元素,返回被删除的元素
var del1 = arr.shift();
console.log(cd);//返回当前数组的长度
console.log(del1);
console.log(arr);
splice
集添加数组元素、删除数组元素、替换数组元素功能于一身
index
必需。整数,规定添加/删除元素的位置(具体的下标),使用负数可从数组结尾处规定位置。
howmany
必需。要删除的项目数量。如果设置为 0,则不会删除项目。
如果要做数组添加第二个参数设置为0
item1, ..., itemX
可选。向数组添加的新项目。(添加,替换)
注:
(1) 如果做数组元素添加,需要给该方法添加三个参数,一个都不能少
(2)如果做数组元素删除:
一个参数:表示从当前位置开始删除,删除到末尾
两个参数:第一个参数表示从第几元素的位置开始删除,第二个参数几个元素
(3)如果做数组元素替换,需要给该方法添加三个参数,一个都不能少,说是替换,其实就是删了重填!
Array
包含被删除元素的新数组,如果有的话。
var arr = [1,4,6];
//① 添加方法
arr.splice(2,0,9);
console.log(arr);
//② 删除方法
arr.splice(1);//一个参数表示从当前位置开始删除,删除到末尾
arr.splice(1,1);//两个参数表示从第一个元素的位置开始删除,1个元素
//③ 替换方法
arr.splice(1,1,10);//从数组的第一个元素开始删除,删除1个,用10代替
arr.splice(1,2,'c','d');
console.log(arr);
数组排序
sort排序以及自定义排序
sort
默认从小到大(升序),默认按字符串ASCII编码方式进行排序如果使用自定义排序,需要给sort方法传入参数,参数必须是函数
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。
如果想按照其他标准进行排序,就需要提供比较函数。
例如:
情况1:如果数组中是纯数字、位数不相等的情况就需要自定义排序
情况2: 如果数组中的元素是对象形式,也需要自定义排序
该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。
相邻(后一位元素和前一位元素)的两个值作比较
比较函数应该具有两个参数 a 和 b
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。
总结:
如果a - b 则从小到大排列 升序
如果 b - a 则从大到小排列 降序
Date.parse(‘具体时间’)
将具体时间转换成对应的时间戳
var arr = [
{"date":'2019-09-01'},
{"date":'2019-09-05'},
{"date":'2019-07-01'},
{"date":'2018-06-01'},
]
//arr.sort();
arr.sort(paixu('date'));
function paixu(attr){
return function(a,b){
var date = Date.parse(a[attr]);
var date1 = Date.parse(b[attr])
return date-date1;
}
}
console.log(arr);
数组的选择排序和冒泡排序
选择排序
原理:首先从原始数组中找到最小的元素,并把该元素放在数组的最前面,然后再从剩下的元素中寻找最小的元素,放在之前最小元素的后面,直到排序完毕。
var arr = [5,8,7,4];
for(var i = 0 ; i < arr.length ; i++){
for(var j = i + 1; j< arr.length ; j++){
if(arr[i] > arr[j]){
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
console.log(arr);
冒泡排序
概念:
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
解析:1.比较相邻的两个元素,如果前一个比后一个大,则交换位置。
2.第一轮的时候最后一个元素应该是最大的一个。
3.按照步骤一的方法进行相邻两个元素的比较,这个时候由于最后一个元素已经是最大的了,所以最后一个元素不用比较。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
数组操作方法
join
将数组按特定标志组合成字符串,默认分隔逗号
split
将字符串按照特定的分隔符转换成数组,可以自定义分隔符位置
reverse
用于颠倒数组中元素的顺序(由大到小或者由小到大相互切换)
concat
用于连接两个或多个数组。
注意:该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本
indexOf
元素是否存在数组中,在就返回下标,不在就返回-1
lastIndexOf
元素最后一次出现的位置是否存在数组中,在就返回下标,不在就返回-1
toString()
数组转换成字符串
//1.join:将数组按特定标志组合成字符串
var arr = [1,2,3];
console.log(arr.join('-'));
//2.reverse :倒序
arr.reverse();
console.log(arr);
//3.concat:组合数组,返回一个新的数组,注意concat的数组顺序
var arr2 = ['a','b','c'];
console.log(arr.concat(arr2));
//4.indexOf : 元素是否存在数组中,在---返回下标,不在-1
var arr1 = [1,2,3,'html',5,6,7,8];
if(arr1.indexOf("html")!=-1){
arr1.splice(arr1.indexOf("html"),1);
}
console.log(arr1);
数组迭代方法
every
针对数组元素做些判断。
总结:该方法只有判断的功能并没有获取具体的功能!!!
① 如果数组中跟条件进行比较 检测到有一个元素不满足,则整个表达式返回false,且剩余的元素不会再进行检测。
②如果所有元素都满足条件,则返回 true。
语法格式:
数组名.every(function(值,下标){
检索条件
})
或者
数组名.every(函数名)
function 函数名(value){
}
some
针对数组元素做些判断,如果结果有一个为true 则返回的结果为true
语法格式:
数组名.some(function(值,下标){
})
或者
数组名.some(函数名)
function 函数名(value){
}
filter
针对数组元素做些判断,满足条件的元素,会组成一个新的数组,并且返回
语法格式:
数组名.filter(function(值,下标){
})
或者
数组名.filter(函数名)
function 函数名(value){
}
map
返回一个新的数组,数组中的元素为原始数组元素调用函数处理后的值,按照原始数组元素顺序依次处理元素
语法格式:
数组名.map(function(值,下标){
})
或者
数组名.map(函数名)
function 函数名(value){
}
forEach
没有返回值,就是一个简单的循环
语法格式:
数组名.forEach (function(值,下标){
})
Math对象
Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math()
像Math.sin() 这样的函数只是函数,不是某个对象的方法。
无需创建它,通过把 Math 作为对象使用就可以调用其所有属性和方法。
语法结构:Math.sin()....
数学对象方法
floor
向下取整(去掉小数部分)
ceil
向上取整 只要有小数就进位
abs
绝对值(绝对值是指一个数在数轴上所对应点到原点的距离) 默认用||表示正数的绝对值= 正数负数的绝对值= 正数
pow
幂 例如:3的3次幂
sqrt
开根号60 = 4*15 = 2倍根号15
random
随机数0-1 但是不包括1
round
四舍五入
//Math.floor 向下取整 去掉小数部分
console.log(Math.floor(4.666));
//Math.ceil 向上取整 只要有小数就进位
console.log(Math.ceil(5.001));
//Math.round 四舍五入
console.log(Math.round(3.69));
//Math.abs 绝对值
console.log(Math.abs(100));
//Math.pow 幂
console.log(Math.pow(3,2));
//Math.sqrt 开根
console.log(Math.sqrt(60));
//Math.random 随机数
console.log(Math.random() * 10);
console.log(Math.random() * 20 + 30);
网友评论