JS-数组与伪数组
2024-08-27 10:39:50
数组与伪数组
把符合以下条件的对象称为伪数组:
- 具有length属性
- 按索引方式存储数据
- 不具有数组的push,pop等方法
伪数组(类数组):无法直接调用数组方法或期望length属性有什么特殊的行为,不具有数组的push,pop等方法,但仍可以用数组遍历方法来遍历它们。典型的是函数的argument
参数,还有像调用document.getElementsByTagName
, document.childNodes
之类的,它们返回的NodeList
对象都属于伪数组。
可以使用以下方法将伪数组转化为真正的Array对象。
Array.prototype.slice
function makeArray (c) {
try{
return Array.prototype.slice.call(c);
}catch(e){
var ret = [],i, len = c.length;
for(i = 0; i < len; i++) {
ret[i] = (c[i]);
}
return ret;
}
}
ES6中数组的新方法 Array.from()
function test(){
var arg = Array.from(arguments);
arg.push(5);
console.log(arg);
}
test(1,2,3,4); //1,2,3,4,5
ES6展开操作符
es6中,展开操作符对于实现了 Iterator 接口的对象转为真正的数组
任何 Iterator 接口的对象,都可以用扩展运算符转为真正的数组。
let nodeList = document.querySelectorAll('div');
let array = [...nodeList];
上面代码中,querySelectorAll方法返回的是一个nodeList对象。它不是数组,而是一个类似数组的对象。这时,扩展运算符可以将其转为真正的数组,原因就在于NodeList对象实现了 Iterator 。
对于那些没有部署 Iterator 接口的类似数组的对象,扩展运算符就无法将其转为真正的数组。
let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};
// TypeError: Cannot spread non-iterable object.
let arr = [...arrayLike];
上面代码中,arrayLike是一个类似数组的对象,但是没有部署 Iterator
接口,扩展运算符就会报错。这时,可以改为使用Array.from
方法将arrayLike
转为真正的数组。
concat+apply
let nodeList = document.querySelectorAll('div');
let nodeArray = Array.prototype.concat.apply([], nodeList); // apply会将nodeList展开
jquery中的,jQuery.toArray()
方法
alert($('li').toArray());
jquery
中,jQuery.makeArray(obj)
将类数组对象转换为数组对象。
类数组对象有 length 属性,其成员索引为 0 至 length - 1。实际中此函数在 jQuery 中将自动使用而无需特意转换。
var arr = jQuery.makeArray(document.getElementsByTagName("div"));
最新文章
- ORACLE序列号
- Java源码分析系列
- jQuery立体式数字滚动条增加
- Hadoop 权威指南学习2 (Sqoop)
- cocos2dx中CC_CALLBACK_1等宏中this指针实际指向
- 多个git账号的配置
- WPF绑定数据源
- CentOS6.5下Tomcat7 Nginx Redis配置步骤
- 分享自己写的一个小工具RGB转十六进制(高手勿喷)
- 不可或缺 Windows Native (10) - C 语言: 文件
- 从零开始攻略PHP(8)——面向对象(下)
- NSInvocation Basics
- 根据dwarfdump、Symbolicatecrash查找错误代码
- 转:浅谈命令查询职责分离(CQRS)模式
- 符号表(Symbol Tables)
- html风格的滚动条
- Java Web 开发环境快速搭建
- Newtonsoft.Json输出JSON 时动态忽略属性
- WCF上传下载文件
- OpenOCD-JTAG调试
热门文章
- spice在桌面虚拟化中的应用系列之三(USB映射实现,SSL加密,密码认证,多客户端支持)
- Guava【google】
- P4393 [BOI2007]Sequence 序列问题[贪心]
- 2019-2020-1 20199301《Linux内核原理与分析》第一周作业
- 第113题:路径总和II
- 专为简化 C 开发而设计的编程语言 Trad
- Codeforces Round #533 (Div. 2) E. Helping Hiasat(最大独立集)
- BZOJ4706 B君的多边形 (超级卡特兰数/施罗德数)
- perfectpixel 加载PSD图到网页中和已经写好的网页进行对比
- E:nth-last-child(n)