数组的一些方法属性介绍

声明数组的两种方式:

    1.    构造函数的方式
            var array obj = new Array();    创建一个数组;
            var arrayobj = new Array(size);    创建一个指定长度的数组;
    2.    声明字面量的方式
            var arr = [];

数组赋值注意事项:

    数组里面能够存放任意类型的值,并且可以同时存放字符串以及数字,但这样会以后数组的调用造成隐患,所以数字最好按数据类型分类存放;

数组的索引

    数组是有序的,数组中每一个元素都有一个索引,索引是从0开始的;

数组的长度

    数组有一个 length属性,指代数组的长度,即数组中元素的个数;

数组遍历

   
   
  1. for(var i = 0; i < arr.length;i++) {
  2. console.log(arr[i]);
  3. }

数组元素的添加

    array. push();    将元素添加到数组结尾,返回数组长度;
    array. unshift();    将元素添加到数组开始位置;

数组元素的删除:

    array. pop();    移除数组中最后一个元素;
    array. shift();    移除数组第一个元素;
    array. splice(1,2,"aa","bb");
            值说明:
            1.开始要删除的下标;
            2.要移除的个数;
            "aa","bb". 被删除的下标重新赋值;

数组的截取(浅复制,不影响原来的数组)

    array. slice(start,[end]);

数组的合并

    array. concat(item[item]);

数组的排序

    array. reverse();    反转数组;
    array. sort();    对数组元素进行排序;

查找数组元素出现位置

    array. indexof();    查找元素第一次的位置下标;
    array. lastIndexof();    查找元素最后一次出现的位置下标;如果有两个值,第二个参数表示从第几个下标开始查找;

稀疏数组

    数组中存在未赋值的空位置;

数组方法


forEach();
        遍历数组的每一个值与下标,依次传递给回调函数供其使用。
        作用: 就是为了简化变化数组的过程。
        语法: arr.forEach(function(val, i, arr){});


var arr = ['cba', 'nba', 'bbc', 'aac', 'ic'];

// 普通方式遍历数组
for (var i = 0, len = arr.length; i < len; i++) {
    console.log(arr[i]);
}

// 通过forEach方法来遍历
arr.forEach(function(val) {
    console.log(val);
});

map();
        遍历数组的每一个值与下标,依次传递给回调;
        然后接收回调函数返回结果,把这些结果组成一个新数组返回。
        作用:为了通过一组数据映射成另外一组数据。
        语法:arr.map(function(val, i, arr){return xxx});


var numArr = [1, 3, 5, 8, 10];

// 普通方式实现
var mapArr = [];
for (var i = 0, len = numArr.length; i < len; i++) {
    mapArr.push(numArr[i] * 10);
}
console.log(mapArr);

// 利用map方法,把arr中的所有值放大10console.log(numArr.map(function (val) {
    return val * 10;
}));

filter();
        遍历数组的每一个值与下标,依次传递给回调;
        如果回调函数执行的结果布尔值为true;
        就会保留这个值,最终返回所有被保留的值组成的新数组;
        作用:为了过滤那些不需要的数据;
        语法:arr.filter(function(val, i, arr){return true})


var numArr = [1, 100, 50, 20, 33, 5, 73, 21];

// 大于50的留下,普通方式
var newArr = [];
for (var i = 0, len = numArr.length; i < len; i++) {
    if (numArr[i] >= 50) {
        newArr.push(numArr[i]);
    }
}
console.log(newArr);

// 大于50的留下,利用filter方法
console.log(numArr.filter(function (val) {
    return val >= 50;
}));

some();
        遍历数组的每一个值与下标,依次传递给回调,
        如果回调中有一个返回true,那么some的结果就为true。
        可以认为是||运算符。
        some在遇到回调为true的时候,会终止剩余的迭代。
        作用:判断一组数据是否含有符合某种规则的数据。
        语法:arr.some(function(val, i, arr){return true})


var arr = [1, 'str', function(){}, null, 43, 'nba'];

// 判断数组中是否含有字符串类型的数据
var has = false;
for (var i = 0, len = arr.length; i < len; i++) {
    if (typeof arr[i] === 'string') {
        has = true;
        break;
    }
}
console.log(has);

// 使用some完成
console.log(arr.some(function (val) {

    // some遍历到第二个值的时候,我们返回的truesome就会终止遍历
    //console.log(arguments);
    if (typeof val === 'string') {
        return true;
    }
}));

var arr = [10, 8, 34, 67, 345, 76];

// 遍历数组,如果遇到奇数,那么终止遍历,否则打印其值
arr.some(function(val){

    // 遇到奇数,返回true,告诉some终止遍历
    if (val % 2 !== 0) {
        return true;
    }
    console.log(val);
});

every();
        遍历数组的每一个值与下标,依次传递给回调,
        如果所有的回调中都返回true,那么every的结果才为true。
        可以认为是&&运算符。
        every在遇到回调为false的时候,会终止剩余的迭代。
        作用:判断一组数据是否全部符合某种规则的数据。
        语法:arr.every(function(val, i, arr){return true});


var arr = [1, 2, 4, 'ds', Function];

// 判断数组中的数据是否全部为数值
console.log(arr.every(function (val) {

    // 如果为number,返回true    // 否则利用函数的默认返回值返回undefined(相当于是false)
    if (typeof val === 'number') {
        return true;
    }
}));

var arr = [10, 8, 34, 67, 345, 76];

// 遍历数组,如果遇到奇数,那么终止遍历,否则打印其值
arr.every(function(val){

    // 遇到偶数,返回true,告诉every继续遍历吧
    if (val % 2 === 0) {
        console.log(val);
        return true;
    }
});

join()
       将所有元素转换为字符串拼接在一起,返回生成的字符串,如果不指定分隔符,默认使用逗号;
       join() 方法是split() 方法的逆向操作, 后者是将字符串分割成若干块来创建一个数组;
var a = [1, 2, 3];
a.join();       // '1, 2, 3'
a.join(' ');    // '1 2 3'
a.join('');     // '123'


reverse()
       将数组在原数组的基础上对元素逆向排序,不产生新的数组;
var a = [1,2,3];
console.log(a.reverse());   //3,2,1


sort()
        将数组中的元素排序并返回排序后的数组,当不带参数调用时, 数组元素已字母顺序表排序;
        如果数组包含underfind元素, 它们会被排到数组的尾部;
var a = ['a','c','b'];
console.log(a.sort());      // a,b,c

        如果需要按照其他方式来排序, 需要给sort()方法传递一个比较函数;
var a = [33, 4, 11, 22];

a.sort();       // 11,22,33,4

a.sort(function (a, b) {
    return a - b;       // 根据顺序,返回负数>0>正数
});

a.sort(function (a, b) {
    return b - a;
})

//将字符串数组按照字符长度从小到大排列
var arr = ["a", "bsdfdsfb", "cccd", "ddd"];
arr.sort(function (a, b) {
    return b.length - a.length;
});
console.log(arr);


concat()
        创建并返回新的数组, 他的元素包含调用concat()的原始数组的元素和coancat()的每一个参数;
var a = [1,2,3]
a.concat(4,5);          // 1,2,3,4,5
a.concat([4,5]);        // 1,2,3,4,5
a.concat([4,5],[6,7]);  // 1,2,3,4,5,6,7
a.concat(4,[5,[6,7]]);  // 1,2,3,4,5,[6,7]


slice()
        返回指定数组的一个片段或子数组.他的两个参数分别指定了开始和结束的位置(包头不包尾);
        如果只有一个参数, 返回的数组将包含从开始位置到数组结尾的所有元素;
        如果参数是负数, 它表示相对于数组最后一个元素的位置,如-1 表示最后一个元素;

toString()
        将数组转化为字符串;

给数组的原型添加方法


 这里以给数组添加一个计算数组长度的方法为例:
  
  
  1. Array.prototype.conLength = function(){
  2. console.log(this.length);
  3. }
  4. var arr = [];
  5. arr.push(1,4,7);
  6. arr.conLength();
    结果为数组传入值个数:3;

判断真伪数组

function isArrayLike(arrayLike) {
    /*
    * 1、判断是不是对象,不是直接返回false
    * 2、是function或者window,也直接返回false
    * 3、再判断是不是真数组,是返回true
    * 4、不是真数组继续判断
    * 4.1、判断对象的length是不是为0,是返回true
    * 4.2、判断length是不是number类型,而且>0,同时还需要拥有length - 1这个属性,满足返回true
    * 5、默认返回false
    * */

    // functionwindow、非对象直接返回false
    if(typeof arrayLike !== 'object' || arrayLike === null
            || typeof arrayLike === 'function' || arrayLike === window ) {
        return false
    }

    // 是真数组返回true
    if({}.toString.call(arrayLike) === '[object Array]') {
        return true;
    }

    // 是伪数组返回true
    return arrayLike.length === 0 ||
            (typeof arrayLike.length === 'number' && arrayLike.length > 0
                && (arrayLike.length - 1) in arrayLike);

    return false;
}

    



































    
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值