类数组转化为真正的数组

引言

开发过程中,有很多时候获取到的是类似数组的对象。比如元素的集合(elementcollection,nodeList,以及今天开发时发现classList也是类数组)。有时我们需要类数组去调用数组的方法,怎么办?

办法一

遍历类数组,将类数组里面的元素依次放入一个新的数组

  1. 类数组本身虽然不是数组,但是有interator接口,所以可遍历。(interator指可遍历、可迭代)
let foo = {
    0 : 1,
    1 : 2,
    2 : 3,
    length : 3
}

let arr = [];

for(let item of foo){
    arr.push(item)
}

办法二

使用 es6 中 Array.from()方法转换

let foo = {
    0 : 1,
    1 : 2,
    2 : 3,
    length : 3
}
let arr = Array.from(foo)

办法三

使用 apply 和 call
apply方法的第二个参数是数组,也可以是类数组,在调用的时候会将第二个参数依次展开。

let foo = {
    0 : 1,
    1 : 2,
    2 : 3,
    length : 3
}
// apply
let arr = [].concat.apply([],foo)
// call
let arr = Array.prototype.slice.call(foo)
console.log(arr)

原文地址:https://www.cnblogs.com/ifon/p/11409871.html

时间: 2024-11-14 19:15:28

类数组转化为真正的数组的相关文章

将一维数组转化成二维数组

<nz-table #colSpanTable [nzData]="temp" nzBordered> <tbody> <ng-container *ngFor="let row of temp;let i = index"> <tr> <td *ngFor="let title of row">{{title.AreaCodesName}}</td> </tr>

js将一维数组转化为二维数组

function reduceArray (arr,count) { var len,ar = Array(),k = 0; if (arr.length % count == 0) { len = parseInt(arr.length / count); } else{ len = parseInt(arr.length / count) + 1; } for (var i = 0;i < len;i++) { if (ar[i]) { ar[i] = ar[i]; }else{ ar[i]

观V8源码中的array.js,解析 Array.prototype.slice为什么能将类数组对象转为真正的数组?

在官方的解释中,如[mdn] The slice() method returns a shallow copy of a portion of an array into a new array object. 简单的说就是根据参数,返回数组的一部分的copy.所以了解其内部实现才能确定它是如何工作的.所以查看V8源码中的Array.js     可以看到如下的代码: 一.方法  ArraySlice,源码地址,直接添加到Array.prototype上的"入口",内部经过参数.类型

将类数组转化成数组

首先说说什么是类数组: 1.拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解), 2.不具有数组所具有的方法, 比如:arguments 将类似数组的对象转化成真正的数组的方法: 方法一: var arr = Array.prototype.slice.apply(arguments); 或 var arr = Array.prototype.slice.call(arguments); <script> var aa =

在Javascript中什么是伪数组?如何将伪数组转化为标准数组?

伪数组(类数组): 无法直接调用数组方法或期望length属性有什么特殊的行为,不具有数组的push,pop等方法,但仍可以对真正数组遍历方法来遍历它们.典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组.可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象. function log(){ var args

再谈怎样以最简单的方法将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式

今天review代码,看见某些大爷在将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式时仍然仅仅顾结果不注重过程,"大爷"咱能负点责任吗? 将泛型为String类型的集合转化为逗号间隔字符串形式: 測试类: package com.ghj.packageofclient; import java.util.ArrayList; import java.util.List; import com.ghj.packageoftool.StringUtils; p

将一个已排序的链表或数组转化成一棵平衡二叉树

Problem:Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST. 解题思路:这里要充分利用元素的有序性,来构造一棵平衡二叉树,这样可以避免为了维持二叉树的平衡性,而进行各种旋转操作.可以每次都向树中插入一个序列中的中间元素,这样就可以保证该结点的左子树和右子树含有结点的数目相等(或只相差一个).这样反复操作,就可以构造一颗类完全

再谈如何以最简单的方法将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式

今天review代码,看见某些大爷在将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式时仍然只顾结果不注重过程,"大爷"咱能负点责任吗? 将泛型为String类型的集合转化为逗号间隔字符串形式: 测试类: package com.ghj.packageofclient; import java.util.ArrayList; import java.util.List; import com.ghj.packageoftool.StringUtils; pu

iview中使用Tag时进行数据的变化和实现将输入内容转化为标签输出数组

上代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>iview example</title> <link rel="stylesheet" type="text/css" href="http://unpkg.com/iview/dist/styles/iview.css"