JavaScript Array.from及其相关用法详解(示例演示)

2025-03-27 14:50

本文主要是介绍JavaScript Array.from及其相关用法详解(示例演示),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array...

JavaScript 中的 Array.from 方法是一个强大的工具,可以轻松地将类数组对象或可迭代对象转换为数组,并通过可选的回调函数对每个元素进行自定义处理。本文将详细介绍 Array.from 的基本用法、实际场景中的应用,以及它如何与其他 javascript 特性相结合提升代码的简洁性和可读性。

一、Array.from 方法概述

1. 方法介绍

Array.from 是 ES6 引入的一个静态方法,用于从类数组对象(具有 length 属性的对象)或可迭代对象(如字符串、Set、Map)创建一个新的数组实例。

语法:

Array.from(arrayLike, mapFunction, thisArg)
  • arrayLike:要转换为数组的类数组对象或可迭代对象。
  • mapFunction(可选):一个函数,对每个元素执行转换。
  • thisArg(可选):执行 mapFunction 时的 this 值。

返回值:

一个新的数组。

2. 示例演示

基本用法:

const arrayLike = { 0: 'a', 1: 'b', length: 2 };
const result = Array.from(arrayLike);
console.log(result); // ['a', php'b']
const str = 'hello';
console.log(Array.from(str)); // ['h', 'e', 'l', 'l', 'o']

mapFunction 的用法:

const nums = [1, 2, 3];
const doubled = Arrphpay.from(nums, x => x * 2);
console.log(doubled); // [2, 4, 6]

二、结合实际场景的使用

1. 初始化二维数组

在一些算法题中,我们可能需要初始化一个二维数组。利用 Array.from 可以轻松实现:

const numRows = 3;
const rows = Array.from({ length: numRows }, () => []);
console.log(rows); // [[], [], []]

这个例子中:

  • { length: numRows } 定义了一个长度为 numRows 的类数组对象。
  • () => [] 是一个回调函数,用于为每一行生成一个新的空数组。

实际应用: 在模拟二维矩阵时,rows 数组可以用于存储每一行的数据,例如在处理 Z 字形转换的算法中。

Z 字形转换示例:

const numRows = 3;
const rows = Array.from({ length: numRows }, () => []);
const input = 'PAYPALISHIRING';
let direction = 1, row = 0;
for (const char of input) {
    rows[row].pusjavascripth(char);
    if (row === 0 || row === numRows - 1) direction *= -1;
    row += direction;
}
console.log(rows.map(r => r.join('')).join('')); // PAHNAPLSIIGYIR

2. 从可迭代对象创建数组

对于字符串、Set 或 Map,Array.from 提供了一种简单的方法将它们转换为数组。

字符串转数组:

const str = 'JavaScript';
console.log(Array.from(str)); // ['J', 'a', 'v', 'a', 'S', 'c', 'r', 'i', 'p', 't']

从 Set 转数组(去重):

const set = new Set([1, 2, 2, 3]);
console.log(Array.from(set)); // [1, 2, 3]

从 Map 转数组:

const map = new Map([[China编程1, 'a'], [2, 'b']]);
console.log(Array.from(map)); // [[1, 'a'], [2, 'b']]

3. 构造特定范围的数组

可以通过 Arrahttp://www.chinasem.cny.from 快速生成特定范围的数组。

生成从 0 到 9 的数字数组:

const range = Array.from({ length: 10 }, (_, i) => i);
console.log(range); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

生成平方数数组:

const squares = Array.from({ length: 5 }, (_, i) => i ** 2);
console.log(squares); // [0, 1, 4, 9, 16]

三、注意事项

1. 类数组对象必须有 length 属性

Array.from 的第一个参数必须是类数组对象或可迭代对象。类数组对象需要显式地定义 length 属性。

无效示例:

const obj = { 0: 'a', 1: 'b' };
console.log(Array.from(obj)); // []

修正:

const obj = { 0: 'a', 1: 'b', length: 2 };
console.log(Array.from(obj)); // ['a', 'b']

2. 回调函数中的索引

Array.from 的回调函数中,除了当前元素,还可以访问其索引。

示例:

const arr = Array.from({ length: 5 }, (val, index) => index * 2);
console.log(arr); // [0, 2, 4, 6, 8]

3. 性能注意

Array.from 的回调函数可能会对性能产生一定的影响,特别是在处理大规模数据时,建议在性能要求较高的场景中谨慎使用。

推荐:

  • JavaScript
  • react
  • vue

到此这篇关于JavaScript Array.from及其相关用法详解的文章就介绍到这了,更多相关js Array.from用法内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于JavaScript Array.from及其相关用法详解(示例演示)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153971

相关文章

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法

《springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法》:本文主要介绍springboot整合阿里云百炼DeepSeek实现sse流式打印,本文给大家介绍的非常详细,对大... 目录1.开通阿里云百炼,获取到key2.新建SpringBoot项目3.工具类4.启动类5.测试类6.测