当前位置: 首页 > wzjs >正文

中山外包网站设计装修网站模板下载

中山外包网站设计,装修网站模板下载,仲恺住房和城乡建设局网站,有没有设计网站在广州的Array.from() 是 JavaScript 中一个非常实用的静态方法,用于将类数组对象(array-like objects)或可迭代对象(iterable objects)转换为一个新的数组实例。 核心功能解析: 转换对象类型: 类数组对象 (Array-like Objects): 拥有 l…

Array.from() 是 JavaScript 中一个非常实用的静态方法,用于将类数组对象(array-like objects)或可迭代对象(iterable objects)转换为一个新的数组实例。

核心功能解析:

  1. 转换对象类型:
    • 类数组对象 (Array-like Objects): 拥有 length 属性,并且可以通过数字索引访问元素的对象(如 arguments, NodeList, HTMLCollection, { 0: ‘a’, 1: ‘b’, length: 2 })。
    • 可迭代对象 (Iterable Objects): 实现了 [Symbol.iterator] 方法的对象(如 String, Set, Map, TypedArray, 自定义迭代器对象)。
  2. 语法:
Array.from(arrayLikeOrIterable[, mapFn[, thisArg]])
  • arrayLikeOrIterable:必需。要转换为数组的类数组对象或可迭代对象。
  • mapFn:可选。一个映射函数,新数组的每个元素都会执行该函数。作用类似于 Array.prototype.map()。
  • thisArg:可选。执行 mapFn 函数时使用的 this 值。
  1. 返回值: 一个新的数组实例。

关键特点:

  • 浅拷贝 (Shallow Copy): 如果被转换的对象包含对象引用,新数组包含的是对这些相同对象的引用(不是深拷贝)。
  • 处理稀疏数组: 对于类数组对象中缺失的索引(例如 { length: 3 }),Array.from() 会创建稀疏数组(对应位置为 undefined)。
  • 映射功能: 第二个参数 mapFn 允许在创建数组的同时对每个元素进行转换,避免了先调用 Array.from() 再调用 map() 的额外开销。
  • this 绑定: 第三个参数 thisArg 允许在 mapFn 中指定 this 上下文。

常见应用场景:

  1. 字符串转字符数组:
const str = "hello";
const charArray = Array.from(str);
console.log(charArray); // ['h', 'e', 'l', 'l', 'o']
  1. NodeList / HTMLCollection 转数组 (DOM 操作):
    这是最常见的应用之一,因为 querySelectorAll 等方法返回 NodeList,它没有数组的许多方法(如 map, filter, reduce)。
const divs = document.querySelectorAll('div'); // NodeList
const divArray = Array.from(divs); // 转换为真正的数组// 现在可以使用数组方法
divArray.forEach(div => console.log(div));
divArray.filter(div => div.classList.contains('active'));
  1. arguments 对象转数组:
    在函数内部,arguments 是一个类数组对象。
function sum() {// 旧方法: Array.prototype.slice.call(arguments)const argsArray = Array.from(arguments);return argsArray.reduce((acc, curr) => acc + curr, 0);
}
console.log(sum(1, 2, 3)); // 6

注意:现代 JavaScript 更推荐使用剩余参数(…args)替代 arguments。

  1. Set 或 Map 的键/值转数组:
    Set 和 Map 都是可迭代对象。
const mySet = new Set([1, 2, 2, 3]); // Set(3) {1, 2, 3}
const setArray = Array.from(mySet);
console.log(setArray); // [1, 2, 3] (去重)const myMap = new Map([['a', 1],['b', 2]
]);
const keysArray = Array.from(myMap.keys()); // ['a', 'b']
const valuesArray = Array.from(myMap.values()); // [1, 2]
const entriesArray = Array.from(myMap); // [['a', 1], ['b', 2]]
  1. 生成数字序列:
    利用 { length: N } 这个类数组对象和 mapFn。
// 生成 [0, 1, 2, 3, 4]
const sequence1 = Array.from({ length: 5 }, (_, index) => index);
console.log(sequence1); // [0, 1, 2, 3, 4]// 生成 [1, 2, 3, 4, 5]
const sequence2 = Array.from({ length: 5 }, (_, index) => index + 1);
console.log(sequence2); // [1, 2, 3, 4, 5]// 生成 [2, 4, 6, 8, 10]
const doubles = Array.from({ length: 5 }, (_, index) => (index + 1) * 2);
console.log(doubles); // [2, 4, 6, 8, 10]

这比传统的 for 循环或 Array(n).fill().map() 更简洁。

  1. 处理具有非标准键名的类数组对象:
    只要对象有 length 属性和按数字索引访问元素的能力。
const arrayLike = {'0': 'zero','1': 'one','2': 'two','name': 'My Array-Like', // 非数字属性会被忽略length: 3
};
const realArray = Array.from(arrayLike);
console.log(realArray); // ['zero', 'one', 'two']

注意事项:

  1. 兼容性: Array.from() 是 ES6 (ES2015) 引入的方法。现代浏览器和 Node.js 环境普遍支持。如果需要支持非常老的浏览器(如 IE11),需要使用 polyfill(例如 Babel 提供的)或替代方法(如 Array.prototype.slice.call(arrayLike))。
  2. length 属性是关键: 对于类数组对象,必须有 length 属性,且其值应为非负整数。Array.from() 会读取这个 length 值来确定新数组的长度。
  3. 非索引属性: 类数组对象中的非数字索引属性(如上面的 name: ‘My Array-Like’)在转换过程中会被忽略。
  4. 稀疏处理: 如果类数组对象的索引不连续(稀疏),新数组对应的位置将是 undefined。

总结:

Array.from() 是 JavaScript 中处理类数组和可迭代对象转换的强大工具。它的核心价值在于:

  1. 将类数组/可迭代对象安全、方便地转换为真正的数组,从而解锁所有数组方法(map, filter, reduce, forEach 等)。
  2. 提供内置的映射功能,允许在转换过程中直接修改元素。
  3. 简洁地生成数值序列。

熟练掌握 Array.from() 能显著提高处理 DOM 集合(NodeList)、函数参数(arguments)、集合类型(Set, Map)、字符串以及创建特定序列数组的效率和代码可读性。


文章转载自:

http://3JWiL93P.krzrg.cn
http://UXUpQaQj.krzrg.cn
http://EvMIptRt.krzrg.cn
http://rjVHq7Td.krzrg.cn
http://4t16If4l.krzrg.cn
http://f1PaDjCG.krzrg.cn
http://UeMWvbmL.krzrg.cn
http://SZwgr09V.krzrg.cn
http://OQUY6H8D.krzrg.cn
http://JekJMzge.krzrg.cn
http://r41MSLyL.krzrg.cn
http://HpPwa24Y.krzrg.cn
http://JGnmFag8.krzrg.cn
http://D43S8IOy.krzrg.cn
http://nRe8BKpq.krzrg.cn
http://aEBiExBA.krzrg.cn
http://rQzQYax2.krzrg.cn
http://llCMsJX0.krzrg.cn
http://kIT2lkc9.krzrg.cn
http://IEBWBeOh.krzrg.cn
http://eFH33x6A.krzrg.cn
http://fbEdBVDF.krzrg.cn
http://xHXiNEvV.krzrg.cn
http://wFZ2f1KI.krzrg.cn
http://VPwrJorb.krzrg.cn
http://CmzeGxK6.krzrg.cn
http://jjnT2BNH.krzrg.cn
http://ftELe5gi.krzrg.cn
http://LhbjZMXB.krzrg.cn
http://OhqViVTn.krzrg.cn
http://www.dtcms.com/wzjs/638237.html

相关文章:

  • 秦皇岛做网站公司青岛网站设计案例
  • 东营网站建设电话建筑网站新闻写那些好
  • 南通优普网站建设制作长春网站建设SEO优化营销
  • 丽水手机网站建设江苏省建设厅网站职称评审系统
  • 宁波外贸网站设计如何登录百度站长平台
  • 2345浏览器网站沧州网络运营公司
  • 网站怎么做市场分析建站之星模板的使用
  • 淮北建网站费用网站开发的最后5个阶段是什么
  • 长春启做网站多少青岛公司做网站
  • 国内最大的c2c网站是网站运营的作用
  • 好的交互设计网站美工培训班培训学费
  • 网站备案能不能出现世界wordpress 媒体库 文件夹
  • 广州建设集团网站wordpress分页功能
  • 网站管理助手3.0做网站需要了解什么
  • 网站底部版权代码合肥网络公司排名
  • 郑州高端定制网站建设公司无锡做网站公司哪家比较好
  • 网站建设流程表雅诗兰黛网络营销策划书
  • 自助建站软件公司教育网站制作设计
  • 做钢材的做什么网站效果好做个免费的网站
  • 凡客优品官方网站做网站需要前置审批
  • 潍坊建设网站公司电话简单的网站
  • 网站死链怎么删除网站免费推广的方法
  • 太原住房与城乡建设厅网站如何做网站搜索引擎优化
  • 微信网站和手机网站的区别哈尔滨免费网站制作
  • 最好用的企业网站cms万网市值
  • 石家庄网站seo服务黑群辉wordpress
  • 织梦网站源码找一品资源腾讯云服务器手动WordPress
  • 做网站的图片Pc端和手机端的区别重庆今天新闻发布会直播
  • 全国网站制作公司网站开发程序
  • 以数字域名为网址的网站网站建设要多久豆瓣