js基础之类数组

本文主要介绍一下类数组的定义和将类数组转化为数组的方法。

1.定义

满足两个条件的对象就是类数组。
(1)有length属性,最好加上push方法
(2)属性要为索引属性
如下:

var arr = {
    "0": "a",
    "1": "b",
    "2": "c",
    length: 3
};

类数组判断

function isArrayLike(arr){
    if(arr & typeof(arr) === "object" && isFinite(arr.length) && arr.length >= 0 && arr.length === Math.floor(arr.length) && arr.length < 4294967296){
        return true;
    }else{
        return false;
    }
}

类数组并不能直接使用数组的方法,需要用call()或者apply()调用数组的方法。
类似于这样

var obj = {
    "0": "a",
    "1": "b",
    "2": "c",
    length: 3
};
Array.prototype.join.call(obj,"+");    //"a+b+c"

思考以下问题:

var obj = {
    "2": "a",
    "3": "b",
    "4": "c",
    length: 3
};
Array.prototype.push.call(obj,"d");  //{2: "a", 3: "d", 4: "c", length: 4}

这里push的原理是:

Array.prototype.push = function(target){
    obj[obj.length] = target;
    obj.length++;
}

push方法的插入位置是由length决定的。插入之后length加1 。

2. 类数组转化为数组

第一种方法:

var obj = {
    "0": "a",
    "1": "b",
    "2": "c",
    length: 3
};

var b = [];
for (var i = 0; i < obj.length; i++){
    b.push(obj[i]);
}    //["a","b","c"];

第二种方法:

var obj = {
    "0": "a",
    "1": "b",
    "2": "c",
    length: 3
};

var array = Array.prototype.slice.call(obj,0);   //截取obj返回一个新数组   

第三种方法,ES6中的方法,只要有length属性都可以应用此方法。

var obj = {
    "0": "a",
    "1": "b",
    "2": "c",
    length: 3
};

var array = Array.from(obj);

第四种方法:jQuery的makeArray方法

var obj = {
    "0": "a",
    "1": "b",
    "2": "c",
    length: 3
};

var array = $.makeArray(obj);

第五种方法:
var newArr = […obj]; //可以应用ES6的扩展运算符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值