JavaScript 类数组转换成数组的三种方式

  1. Array.prototype.slice.call()
  2. Array.from()
  3. 扩展运算符(…)

类数组:属性值必须是 0,1,2,3... 并且最后要加上长度length
var json = {
    '0': '叁贰壹',
    '1': 'python',
    '2': 'JavaScript',
    length: 3
};

一、Array.prototype.slice.call() 借用了数组原型中的slice方法,返回一个数组

/* 该方法的通用转换函数 */
var toArray = function(s) {
    try {
        return Array.prototype.slice.call(s);
    } catch (e) {
        var arr = [];
        for (var i = 0, len = s.length; i < len; i++) {
            arr[i] = s[i];
        }
        return arr;
    }
}

1. 例 – 类对象

var json = {
    '0': '叁贰壹',
    '1': 'python',
    '2': 'JavaScript',
    length: 3
};

var toArray = function(s) {
    try {
        return Array.prototype.slice.call(s);
    } catch (e) {
        var arr = [];
        for (var i = 0, len = s.length; i < len; i++) {
            arr[i] = s[i];
        }
        return arr;
    }
}

var jsonArr = toArray(json);
console.log(jsonArr);
/* ["叁贰壹", "python", "JavaScript"] */

2. 例 – 字符串

var helloStr = 'hello';

var toArray = function(s) {
    try {
        return Array.prototype.slice.call(s);
    } catch (e) {
        var arr = [];
        for (var i = 0, len = s.length; i < len; i++) {
            arr[i] = s[i];
        }
        return arr;
    }
}

var helloArr = toArray(helloStr);
console.log(helloArr);

/* ["h", "e", "l", "l", "o"] */

二、Array.from() 是 ES6 新增的内容

Array.from()是ES6中新增的方法,可以将两类对象转为真正的数组:类数组对象和可遍历(iterable)对象(包括ES6新增的数据结构Set和Map)

1. 例 – 类对象

/* 以下这种方式属性值必须是 0,1,2,3...  并且最后要加上长度length */

var json = {
    '0': '叁贰壹',
    '1': 'python',
    '2': 'JavaScript',
    length: 3
};

var jsonArr = Array.from(json);
console.log(jsonArr);

/*  ["叁贰壹", "python", "JavaScript"] */

2. 例 – 字符串

/* 该方法也可将字符串转化为数组 */
console.log(Array.from('hello'));
/* ["h", "e", "l", "l", "o"] */

三、扩展运算符(…) 是 ES6中新增的内容,可以将某些数据结构转为数组

注意:必须天生具备 Symbol.iterator 方法的数据类型才可以使用,类数组必须自行定义才可以实现

1. 例 – 字符串

var helloStr = 'hello';

var jsonArr = [...helloStr];
console.log(jsonArr);
/* ["h", "e", "l", "l", "o"] */

2. 例 – 类对象

var json = {
    '0': '叁贰壹',
    '1': 'python',
    '2': 'JavaScript',
    length: 3,
    [Symbol.iterator]: function() {
        // index用来记遍历圈数
        let index = 0;
        let next = () => {
            return {
                value: this[index],
                done: this.length == ++index
            }
        }
        return {
            next
        }
    }
};

var jsonArr = [...json];
console.log(jsonArr);
/* ["叁贰壹", "python"] */



感谢观看 期待关注




在这里插入图片描述

知乎:叄贰壹

简书:带只拖鞋去流浪

关注我,带你一起写bug

warning :未经授权,不得转载

有问题的小伙伴请在下方留言,喜欢就点个赞吧

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值