Web前端之路让前端飞

js中的数组对象和 Math对象

2019-12-09  本文已影响0人  誩先生

数组对象

创建数组

数组可以存储任意数据类型的数据
存储方式分为字面量方式存储、构造函数方式存储
数据类型: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);
上一篇下一篇

猜你喜欢

热点阅读