js基础之类数组

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

1.定义

满足两个条件的对象就是类数组。
(1)有length属性。
(2)其他属性值为number类型
如下:

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);

猜你喜欢

转载自blog.csdn.net/superyuan567/article/details/85112610
今日推荐