Javascript 类数组(Array-like)对象

Javascript中的类数组对象(Array-like object)指的是一些看起来像数组但又不是数组的对象。Javascript中的arguments变量、document.getElementsByTagName()返回值就是典型的类数组对象。

类数组特性

  • 类数组对象具有一个length属性且length的值为非负整数。
  • 类数组对象不具有数组对象的方法。例如:push、 pop等方法。

类数组对象可以像数组一样遍历,但不支持数组对象的方法。

function test1() {
    for(var i = 0; i < arguments.length; i++) {
        console.log(arguments[i]);
    }

    console.log(arguments instanceof Array);
}
test1(2, 3);
/* 输出
2
3
false
*/

function test2(){
    arguments.push(1);
}
test2();
/* 报错
TypeError: undefined is not a function
*/

将类数组对象转化为数组

slice 方法可以用来将一个类数组(Array-like)对象转换成一个数组。 你只需要用数组原型上的slice方法call这个对象。

function arrayify( a ) {
    return Array.prototype.slice.call( a );
}

function test3() {
    var arrayified = arrayify(arguments);
    arrayified.push(1);
    console.log(arrayified);
    console.log(arrayified instanceof Array);
}

test3(2, 3);
/* 输出
[2, 3, 1]
true
*/

也可以简单的使用 [].slice.call(a)代替Array.prototype.slice.call(a)

slice 方法可以用来将一个类数组(Array-like)对象/集合转换成一个数组。你只需将该方法绑定到这个对象上。下述代码中 list 函数中的 arguments 就是一个类数组对象。

1 function list() {
2   return Array.prototype.slice.call(arguments);
3 }
4
5 var list1 = list(1, 2, 3); // [1, 2, 3]

除了使用 Array.prototype.slice.call(arguments),你也可以简单的使用[].slice.call(arguments) 来代替。另外,你可以使用 bind 来简化该过程。

1 var unboundSlice = Array.prototype.slice;
2 var slice = Function.prototype.call.bind(unboundSlice);
3
4 function list() {
5   return slice(arguments);
6 }
7
8 var list1 = list(1, 2, 3); // [1, 2, 3]

实例代码

Array.prototype.slice.apply(document.querySelectorAll(‘.total-con li‘)).map((item)=>{
          if(item.className == ‘hover1‘) {
            this.sortField = item.getAttribute(‘sortField‘)
            this.sortType = item.getAttribute(‘sortType‘)
            return
          }
        })
时间: 2024-10-06 08:12:17

Javascript 类数组(Array-like)对象的相关文章

javascript 类数组对象

原文:https://segmentfault.com/a/1190000000415572 定义: 拥有length属性,其他属性(索引)为非负整数(对象中的所有会被当做字符串来处理,这里你可以当做是个非负整数串来理解) 不具有数组所具有的方法 类数组示例: var a = {'1':'gg','2':'love','4':'meimei',length:5}; Array.prototype.join.call(a,'+');//'+gg+love++meimei' 非类数组示例: var

[Javascript]类数组对象为什么不能用for in进行遍历

上来说重点,再废话 类数组对象不能使用for(var key in  elements)进行遍历,这是因为类数组的最后一个哈希的键值对是length:n   n代表数组长度 在Javascript中,我们在DOM树上面获取页面的元素, 例如使用var emls=getElementsByTagName () var emls=querySelectedAll() 获得的elements包含多个dom元素,在学习的过程中,我没有使用for(var i=0;i<elements.length;i++

使用JavaScript从数组中删除对象

如何从数组中删除对象? 我希望从someArray删除包含名称Kristian的对象. 例如: someArray = [{name:"Kristian", lines:"2,5,10"}, {name:"John", lines:"1,19,26,96"}]; 我要实现: someArray = [{name:"John", lines:"1,19,26,96"}]; #1楼 在数组上

JavaScript中数组Array.sort()排序方法详解

JavaScript中数组的sort()方法主要用于对数组的元素进行排序.其中,sort()方法有一个可选参数.但是,此参数必须是函数. 数组在调用sort()方法时,如果没有传参将按字母顺序(字符编码顺序)对数组中的元素进行排序,如果想按照其他标准进行排序,就需要进行传一个参数且为函数,该函数要比较两个值,并且会返回一个用于说明这两个值的相对顺序的数字. 1.对数字数组进行由小到大的顺序进行排序. 代码: var arr = [22,12,3,43,56,47,4]; arr.sort();

JavaScript中数组Array方法详解

ECMAScript 3在Array.prototype中定义了一些很有用的操作数组的函数,这意味着这些函数作为任何数组的方法都是可用的. 1.Array.join()方法 Array.join()方法将数组中所有元素都转化为字符串并连接在一起,返回最后生成的字符串.可以指定一个可选的符号或字符串在生成的字符串中来分隔数组的各个元素.如果不指定分隔符,默认使用逗号.注意:此方法不会改变原始数组 var arr = ['a', 'b', 'c']; console.log(arr.join());

JavaScript大数组如何根据对象的key快速找到并删除

查找:上代码. function isBigEnough(element) { return element >= 15; } var ret1 = [12, 5, 8, 130, 44].findIndex(isBigEnough); console.log(ret1); // index of 4th element in the Array is returned, // so this will result in '3' var objArr = [{id:1, name:'jiank

JS 对象数组Array 根据对象object key的值排序sort,很风骚哦

有个js对象数组 var ary=[{id:1,name:"b"},{id:2,name:"b"}] 需求是根据name 或者 id的值来排序,这里有个风骚的函数 函数定义: function keysrt(key,desc) {   return function(a,b){     return desc ? ~~(a[key] < b[key]) : ~~(a[key] > b[key]);   } } 使用: var ary=[{id:1,nam

表示集合的数据结构:数组(Array),对象(Object),Map和Set

Map和Set是ES6标准新增的数据类型 Map: 是一组键值对的结构,使用一个二维数组来初始化Map,例如: var m = new Map([['xiaohong',100],['xiaolan',99],['xiaoming',108]]); 或者直接初始化一个空Map: var m = new Map(); m.set('xiaoli',98); m.get('xiaoli'); // 98 m.delete('xiaoli');//删除xiaoli这个键值对 m.get('xiaoli

JavaScript 浅析数组对象与类数组对象

数组(Array对象) 数组的操作 创建数组方法 添加与修改数组元素 删除数组元素 使用数组元素 遍历数组元素 多维数组 数组相关的函数 concat() join() pop() push() shift() unshift() reverse() sort() slice() splice() 类数组对象 定义 举例 对比数组 转换 间接 直接 数组(Array对象) 数组就是一组数据. 在JavaScript中没有数组这种数据类型.数组时对象创建的. 键(下标): 用于区分数组中不同数值的