数组(Array)详解;

Array是ECMAScript最常见用的类型;数组的每一项都可以保存任何类型的数据;如:可以用数组的第一个位置来保存字符串,可以用数组的第二个位置来保存数值,可以用第三个位置来保存对象等;数组的大小还可以动态调整;


1、访问数组可以用索引

var arr = [1, 2, 3, 9];
arr[2] = "ad";
alert(arr);//,2,ad,9;
arr[4] = "我是增加的";
alert(arr) //1,2,ad,9,我是增加的
也就是说,如果索引小于数组的项数,返回值是这个索引对应的值,如果设置某个值的索引超过了数组现有的项数,会替换指定位置的值;

数组的项数保存在length属性中,这个属性始终会返回0或者更大的值;length不只是只读的,通过这个属性可以向末尾移除项,或者向数组中添加新项;

如果访问数组中不存在的索引的值,会返回undefined值;

2、检查数组(数据类型)

typeof只是能检测基本数据类型,不能加检测对象;

js中通过Object.prototype.toString.call()方法,判断对象属于那种内置类型,可以检测任何数据类型,包括基本数据类型;

var arr = [];
alert(Object.prototype.toString.call(arr))  //[object Array]
var obj = {};
alert(Object.prototype.toString.call(obj)) //[object Object]
var a = 123;
alert(Object.prototype.toString.call(a)) //[object Number]
3、将数组转换成字符串toString()  join() valueof();都会以逗号字符串的形式返回数组项,但是join()方法会议不同的分隔符
来构建这个字符串;但是join()方法不传递任何值,也会以逗号分隔开的;
var arr = ["22","88","99"];
console.log(arr.toString()); //22,88,99
console.log(arr.join(".."));//22..88..99
4、数组的方法:
a) 向数组的末尾添加项 push()
var arr = ["22", "88", "99"];
var res = arr.push("op");
console.log(arr, res) // ["22", "88", "99", "op"]  4 返回添加后的是数组的长度;
b) 删除数组末尾项 pop()
var arr = ["22", "88", "99"];
var res = arr.pop();
console.log(arr, res) // ["22", "88"]   "99" 4 返回删除的项;
c) 向数组的开头添加项 unshift()
var arr = ["22", "88", "99"];
var res = arr.unshift("op");
console.log(arr, res) // ["op", "22", "88", "99"]  4  返回删除后数组的长度
d) 向数组的开头删除项 shift();
var arr = ["22", "88", "99"];
var res = arr.shift();
console.log(arr, res) // ["88", "99"]   "22" 返回删除的项
e)  sort():重新排序数组;
var arr = [1, 3, 7, 2, 4, 3];
arr.sort()
console.log(arr) //[1, 2, 3, 3, 4, 7]
var ary = [23, 67, 134, 19, 56];
console.log(ary.sort());//[134, 19, 23, 56, 67]
//可以看出,sort对10以内的排序可以,10以上的就失效,可以给sort()添加一个函数;
function sum(a,b){
    return a-b  //如果升序就用a-b  如果降序就用b-a
}
console.log(ary.sort(sum));//[19, 23, 56, 67, 134]

f) reverse();倒叙,使数组的排序倒置;
var arr = [1, 3, 7, 2, 4, 3];
arr.reverse()
console.log(arr);//[3, 4, 2, 7, 3, 1]
g) concat():数组的拼接;将两个或者多个数组拼接在一起;不会改变原来数组的值;会创建一个新数组;
var arr = [1, 3, 7, 2, 4, 3];
var arr1 = ["a", "c"];
var arr2 = ["yellow", "red"];
var ary = arr.concat(arr1, arr2);
alert(ary)//1,3,7,2,4,3,a,c,yellow,red

h) slice()接受两个参数,返回数组的起始位置,结束位置;如果只有一个参数,返回该参数指定的位置到结尾项;如果两个
参数,返回从第一个参数的起始位置到第二个参数的结束位置,不包括结束位置的项;不会影响原来的数组; 就是查找的意思;
var arr = [1, 3, 7, 2, 4, 3];
var ary = arr.slice(2,4);
console.log(ary);//[7, 2]

i) splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目,返回的是一个数组;
删除:splice有两个参数的时候;splice(1,2) 从索引2开始,删除3项;
var arr = [1, 3, 7, 2, 4, 3];
var ary = arr.splice(1, 2);
alert(ary)//3.7 返回的是删除的项

插入:三个参数,第二个参数为0;splice(0,0,"red");将red添加到索引为0的前面;
var arr = [1, 3, 7, 2, 4, 3];
arr.splice(1, 0,"red");
alert(arr)//1,red,3,7,2,4,3 添加到起始索引的前面

替换:三个参数,第二个参数不为0;
var arr = [1, 3, 7, 2, 4, 3];
arr.splice(1, 1,"red");
alert(arr)//1,red,7,2,4,3 将索引为1的项,1项替换掉

j)查找项在数组中的位置;indexOf() lastIndexOf() 这两个都接受两个参数,要查找的项和表示起点位置的索引,索引可以不写,
但就表示从头开始查找;indexOf是从数组的开头开始查找,lastIndexof()是从数组的末尾开始查找;
var arr = [1, 3, 7, 2, 4, 3];
console.log(arr.indexOf(2, 0)); //返回3 2所在位置的索引;
var arr = [1, 3, 7, 2, 4, 3, 2];
console.log(arr.lastIndexOf(2)); //6
如果没有找到要找的那一项,就会返回-1;多用于判断;

4、循环方法:forEach() map()参数是一个函数;函数里边第一个参数为数组的每一项,第二个参数为第一个参数对应的索引;
var arr = [1, 3, 7, 2, 4, 3, 2];
arr.forEach(function(item,index){
    if(arr[index] == item){
        alert("正确")
    }
}) //返回  正确
var arr = [1, 3, 7, 2, 4, 3, 2];
arr.map(function(item,index){
    if(arr[index] == item){
        alert("正确")
    }
}) //返回  正确

every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。

every() 方法使用指定函数检测数组中的所有元素:

  • 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
  • 如果所有元素都满足条件,则返回 true。

注意: every() 不会对空数组进行检测。

注意: every() 不会改变原始数组。

  
<ul>
    <li class="" id="box" title="dsfdasf">3</li>
    <li id="box">2</li>
    <li>3</li>
</ul>
var a = [1, 4, 8, 3, 2, 9];
var btn = a.every(function (item, index, arry) {
    return item > document.getElementById("box").innerHTML;
})

console.log(btn)  //返回true。要是li的值是3,就返回false;
some()方法与every()方法相同,不相同的是,some方法只要传入的函数对数组中的某一项返回true就返回true;

var a = [1, 4, 8, 3, 2, 9];
var btn = a.some(function (item, index, arry) {
    return item > document.getElementById("box").innerHTML;
})

console.log(btn)  //返回true。要是li的值是3,就返回false;

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

var a = [1,3,5,6];
var res = a.filter(function(item,index){
    return item > 5;
})
console.log(res)  //返回大于5的数,6

















  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值