面试题:将伪数组转换为数组的N种方案

简介: 今天面试了一个人,居然不知道如何将伪数组转换为数组?

什么是伪数组?


  1. length 属性,而且也是数值下标的对象。


  1. 不具备 Array.prototype 上的方法


常见伪数组


  1. arguments


  1. document.getElementsByClassName


  1. $('div')


伪数组转换为数组


输出伪数组


function fun(a,b,c = 1){
    arr = arguments
    console.log(
        typeof arr,
        Array.isArray(arr),
        arr.length,
        arr.slice,
        arr,
    )
fun(3, 2)


使用 Array.from (ES6+)(babel-polyfill)


function fun(a,b,c = 1){
    arr = Array.from(arguments)
    console.log(
        typeof arr,
        Array.isArray(arr),
        arr.length,
        arr.slice,
        arr,
    )
fun(3, 2)


使用 ... 展开运算符(ES6+)(babel)


function fun(a,b,c = 1){
    arr = [...arguments]
    console.log(
        typeof arr,
        Array.isArray(arr),
        arr.length,
        arr.slice,
        arr,
    )
fun(3, 2)


使用 slice 和 call 的方案


function fun(a,b,c = 1){
    arr = Array.prototype.slice.call(arguments)
    console.log(
        typeof arr,
        Array.isArray(arr),
        arr.length,
        arr.slice,
        arr,
    )
    arr = Array.prototype.slice.apply(arguments)
    console.log(
        typeof arr,
        Array.isArray(arr),
        arr.length,
        arr.slice,
        arr,
    )
    arr = [].slice.call(arguments)
    console.log(
        typeof arr,
        Array.isArray(arr),
        arr.length,
        arr.slice,
        arr,
    )
    arr = [].slice.apply(arguments)
    console.log(
        typeof arr,
        Array.isArray(arr),
        arr.length,
        arr.slice,
        arr,
    )
}
fun(3, 2)


循环遍历(兼容性无敌,朴素不)


function fun(a,b,c = 1){
    arr = [];
    for(var i = 0,length = arguments.length; i < length; i++) {
        arr.push(arguments[i]);
    }
    console.log(
        typeof arr,
        Array.isArray(arr),
        arr.length,
        arr.slice,
        arr,
    )
}
fun(3, 2)


相关文章
|
7月前
|
缓存
数组\用数组做散列计算——一点小疑惑
数组\用数组做散列计算——一点小疑惑
30 5
|
8月前
|
编译器 程序员 C语言
【C语言】变长数组,二分查找和数组之间自动替换的实现
【C语言】变长数组,二分查找和数组之间自动替换的实现
|
JSON C# 数据格式
数组比较的几种方式
1、string.Equals() ```csharp string[] strList1= new string[3] {"1", "2", "3"}; string[] strList2= new string[3] {"4", "5", "6"}; if (!string.Equals(strList1, strList2)) { // 比较数组的不同之处 } // 涉及到修改日志输出等数组可以直接json序列化然后用上述方法比较即可,如下 if (!string.Equals(JsonConvert.SerializeObject(list1), JsonConvert
89 0
|
算法 测试技术 C#
C++算法:找出数组的第 K 大和原理及实现
C++算法:找出数组的第 K 大和原理及实现
|
存储 Java
每日一道面试题之如何实现数组和 List 之间的转换?
每日一道面试题之如何实现数组和 List 之间的转换?
|
C语言
C语言之用指针实现两个数组中元素的相加并存放到第三个数组中
C语言之用指针实现两个数组中元素的相加并存放到第三个数组中
211 0
|
存储 C#
C#视频—浅谈数组与集合的差别
C#视频—浅谈数组与集合的差别
|
JavaScript API
伪数组转数组的几种方法
伪数组转数组的几种方法
140 0
|
Java
如何用JAVA实现二维数组向稀疏数组的转换
如何用JAVA实现二维数组向稀疏数组的转换,学习!
103 1
如何用JAVA实现二维数组向稀疏数组的转换
|
JavaScript 索引
伪数组(类数组)
伪数组(类数组)
83 0