数组对象
创建数组
数组可以存储任意数据类型的数据
存储方式分为字面量方式存储, 构造函数方式存储
数据类型: 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];
- //1 添加方法
- arr.splice(2,0,9);
- console.log(arr);
- //2 删除方法
- arr.splice(1);// 一个参数表示从当前位置开始删除, 删除到末尾
- arr.splice(1,1);// 两个参数表示从第一个元素的位置开始删除, 1 个元素
- //3 替换方法
- 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
针对数组元素做些判断.
总结: 该方法只有判断的功能并没有获取具体的功能!!!
1 如果数组中跟条件进行比较 检测到有一个元素不满足, 则整个表达式返回 false, 且剩余的元素不会再进行检测.
2如果所有元素都满足条件, 则返回 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);
来源: http://www.jianshu.com/p/6a9c8cb8bf30