数组的基础结构
数组也是对象数据类型的
typeof [] -> 'object'
数字作为索引,即每一项的属性名,length属性代表数组长度
类数组 类似于但不是数组,有length属性,有索引
1、getElementsByTagName获取的元素集合是类数组
2、函数中的实参集合arguments是类数组
for循环遍历数组的私有属性,for in循环除了数组私有属性,也可以遍历到一些自定义的数组的公有属性
.......
数组中的方法们
console.dir(Array.prototype);
1、方法的意义和作用
2、方法的形参
3、方法的返回值
4、会否改变原有数组
var ary = [1,2,3,4];
实现数组的增删改
增加
1、push() 向数组末尾添加新元素
参数:1到多个, 多个用逗号隔开,可以是任意类型
返回值:返回新增后的数组长度
原有数组改变2、unshift() 向数组开头添加新元素
参数:同push
返回值:返回新增后的数组长度
原有数组改变3、用对象增加的方式添加新元素,键值对操作
ary[ary.length] = 100; 向数组末尾添加新的元素删除
1、pop() 删除数组最后一项(与push对应)
参数:无
返回值:被删除的元素
原有数组改变2、shift() 删除数组第一项(与unshift对应)
参数:无
返回值:被删除的元素
原有数组改变
删完之后,后面元素的索引都会减一,对于大数组来说消耗就多了3、delete ary[index]
把数组当作对象操作 其他项索引不会改变
原有数组改变 length值也不会改4、ary.length -- 删除数组最后一项
原有数组改变 length值会变splice: 数组的增加,修改,删除都可以实现
splice 删除
splice(n,m): 从索引n开始删除m个,m不写删除到数组末尾
splice(0) 清空数组
splice() 不删除 返回空数组
splice(0,1) 删除第一个
splice(ary.length-1) 删除最后一个
返回被删除的内容,以新数组的形式保存
原数组改变splice 修改,基于删除实现
splice(n,m,x): 在原有删除基础上,用x代替删除的内容
返回被删除的内容,以新数组的形式保存
原数组改变splice 增加,基于修改实现
splice(n,0,x): 在原有修改基础上,把x插入到索引n的前面
返回空数组 []
原数组改变
splice(0,0,x):向数组开头添加
splice(ary.length,0,x):向数组末尾添加
实现数组的查询
slice
参数:slice(n,m) 从索引m开始找到m处(不包含m)
slice(n),从索引开始找到末尾并返回
slice(0)/slice(),数组克隆
,返回原来数组的拷贝,三等号返回false,数组地址变了
支持负数索引,会给传递的负数加上数组长度来处理
返回值:找到的部分以一个新数组返回
原有数组不变
参数传递小数会向下取整,大于数组长度按数组长度处理,n > m会返回空数组
拼接数组
concat 将多个数组拼接在一起
参数:拼接的内容,可以是数组也可以是元素
返回值:拼接之后的数组(原数组在前)
原有数组改变
concat.concat()数组克隆
同slice,地址改变跟原来数组不相等
也可以实现向数组末尾添加元素
数组转字符串
toString
参数:无
返回值:转换的字符串
原有数组不变
join 把数组按照指定的分隔符转为字符串 和字符串中的split相对应
参数:指定的分隔符(不指定跟toString效果一样)
返回值:转换的字符串
原有数组不变
eval(ary.join('+')) 可实现数组求和
var ary = [1,2,3,4,5];
var sum = eval(ary.join('+'))
数组每一项的排序和排列
reverse 把数组倒过来排列
参数:无
返回值:倒列后的数组
原有数组改变sort 实现数组排序(只能识别多位数中的第一个)
参数:无或者回调函数
返回值:排序后的数组
原有数组改变
ary.sort(function(a,b){
return a-b; // 升序
return b-a; // 降序
})
验证数组中是否包含某一项
indexOf/lastIndexOf 获取当前项在数组中出现第/最后一次位置的索引
数组中这俩方法IE6-8不兼容
字符出中这俩方法所有浏览器兼容
参数:要验证的元素
返回值:若无返回-1,有返回元素的索引
Array.prototype.myIndexOf = function myIndexOf(value){
var result = -1;
for(var i = 0; i < this.length; i ++){
if(this[i] === value){
result = i;
break;
}
}
return result;
}
遍历数组中每一项
这些方法在IE6-8下均不兼容
forEach
数组中这俩方法IE6-8不兼容
ary.forEach(function (value, index){
// 数组有多少项,当前回调函数就执行多少次,其中value是每一项的值,index是每一项的索引
});
map 在forEach的基础上可以修改数组每一项的值
数组中这俩方法IE6-8不兼容
ary.map(function (value, index){
// 数组有多少项,当前回调函数就执行多少次,其中value是每一项的值,index是每一项的索引
return xxx; // 返回的是修改后的每一项 即把当前项修改为xxx再返回
});
filter
返回值:回调函数的结果为true的元素组成的新数组
ary.filter(function (value, index){
return value > 2;
});
every
some
返回值:true 或false
every要求每一项都返回true结果才是true,some只需要有一项符合,就返回true
像与和或
var result = ary.every(function (value, index){
return value > 2;
});
console.log(result); // false
var result = ary.some(function (value, index){
return value > 2;
});
console.log(result); // false
reduce
参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。初始值可以自己设置,不设置第一次就从数组的index为1开始,第一次的prev是数组的第一项
空数组调用会报错,但设置初始值就不报错
var arr = [1, 2, 3, 4];
var sum = arr.reduce((x,y)=>x+y); // 求和
var mul = arr.reduce((x,y)=>x*y); //求乘积
网友评论