将类数组对象(array-like object)转化为数组对象(Array object)

用法:Array.prototype.slice.call(array-like object)

// 创建一个类数组对象
var alo = {0:"a", 1:"b",2:"c", length:3};

// 转化
var arr = Array.prototype.slice.call(alo);

console.log(
    Array.isArray(alo) // false
)

console.log(
    Array.isArray(arr) // true
)

console.log(alo); // { ‘0‘: ‘a‘, ‘1‘: ‘b‘, ‘2‘: ‘c‘, length: 3 }
console.log(arr); // [ ‘a‘, ‘b‘, ‘c‘ ]

下面分析它是如何工作的.

类数组对象拥有类似数组的结构,所以它可以使用大多数数组的方法。

数组里有一个方法slice(),遍历调用对象,然后返回一个数组。

这里有一个问题,slice()是数组对象的方法,那该如何使用?

数组方法是数组对象的属性,所以可以通过Array.prototype.slice获取它。

然而在一个对象里调用其它对象的方法,我们需要用到"Function.prototype"里的方法call(),像这样function name.call(obj,args)。

所以有,Array.prototype.slice.call(alo)

slice()是一个函数(function),所以从Function.prototype继承了方法call,这也就是为什么我们可以这样用Array.prototype.slice.call(...)

Function.prototype.call(obj)的第一个参数是一个对象,即将传给f.call(obj)函数里的f,这一步,f的上下文(关键词this)的值会是obj.

一般情况下Array.slice(),方法slice将Array作为this的值,使用索引遍历所有的数组元素。在我们的例子中,我们将alo设置为this的值,alo是类数组,本身又具有索引,因此而工作。

NodeList,HTMLCollection都是类数组对象

<body>
<ul id="ho" class="ho">
  <li></li>
</ul>
<script>
// 创建一个htmlCollection对象
var htmlCollection = document.getElementsByTagName("li");

// 创建一个NodeList对象
var nodeList = document.getElementById("ho").childNodes;

// 转化
var h2arr = Array.prototype.slice.call(htmlCollection);
var n2arr = Array.prototype.slice.call(nodeList);

console.log(htmlCollection); // HTMLCollection [ <li> ]
console.log(nodeList); // NodeList [ #text "", <li>, #text "" ]

console.log(h2arr); // Array [ <li> ]
console.log(n2arr); // Array[ #text "", <li>, #text "" ]
</script>
</body>
时间: 2024-08-28 16:16:28

将类数组对象(array-like object)转化为数组对象(Array object)的相关文章

把stdclass object 转化成数组

今天从接口上获取数据,用json_decode转化成发现是一个stdClass Object .例子: 从网上搜到一些方法,我感觉好用的解决方案有两个://PHP stdClass Object转array  function object_array($test) {      if(is_object($array)) {          $array = (array)$array;       } if(is_array($array)) {           foreach($ar

PHP查询数据库,对象结果集转化为数组

$row = $this->db->get();//得出对象结果集 $result = array(); if($row) { //转化为数组 while($value = $row->fetch_array()) { $result[] = $value; } } print_r($result);eixt; return $result; $result=$mysql_query("select `id` from table_a"); $ar=array();

使用apply的方法将伪数组转化为数组

js中好多DOM方法都是针对数组的,可是有时候我们会取得一些伪数组,此时要想操作伪数组,那就必须把伪数组转化为数组,以下通过apply(  )的方法demo一个实例,以供大家参考(以下是部分代码): </head> <body> <span>span</span> <span> span</span> <p>ppp</p> <span>span</span> <span> s

将一个类数组对象转化为数组的几种方法

1.slice 语法:slice(begin,end) 方法选择一个从开始到结束(不包括结束)的数组的一部分浅拷贝到一个新的数组对象,方法不会改变原数组.如果是对象则拷贝对象的引用到新数组,如果是基本类型则会拷贝这些值到新数组. 如果省略begin则会从0开始.如果end被省略则会抽取到最后一个元素,如果end数值大于数组长度则会抽取到最后一个元素. 使用Array.prototype.slice.call(arguments)可以将类数组转化为数组对象,[].slice.call(argume

Array.from()类数组转化为数组的用法

类数组对象转化为数组 let arrayLike = { '0': 'a', '1': 'b', '2': 'c', length: 3 }; let arr = Array.from(arrayLike) arr.forEach(el=>console.log(el)) 输出结果:[a,b,c],需要注意的是,length不能少 原文地址:https://www.cnblogs.com/leileilei/p/10985990.html

es6 Array.from() 将类似数组的对象转化为数组(1)

Array.from() 将数组对象转化为数组,应用方式Array.from(arr) arr数组对象的名称; 常用与类似数组的对象是DOM操作返回的Nodelist集合(如: let ps = document.querySelectorAll('p')),函数内部的arguments对象(如:function(){ let args = Array.from(arguments); //...}) 备注: querySelectorAll('')返回的是一个类似数组的对象,只有将对象转化为数

Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组。

详解:https://www.cnblogs.com/jf-67/p/8440758.html Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组. 1. let arrayLike = { 0: 'tom', 1: '65', 2: '男', 3: ['jane','john','Mary'], 'length': 4 } let arr = Array.from(arrayLike) console.log(arr) // ['tom','65','男',['

将类数组转化成数组

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

php中将SimpleXMLElement Object转化为普通数组

php中将SimpleXMLElement Object转化为普通数组 转: http://www.php230.com/transform-simplexmlelement-object-to-array-with-php.html 改成:属性和元素都作为数组的值 php代码: <? function xmlToArr($xml, $root = true) { if(!$xml->children()) { return (string)$xml; } $array = array();