6 种在 JavaScript 中将字符串转换为数组的方法
admin
2024-02-11 03:01:45
0

数组是 JavaScript 中最强大的数据结构,我发现自己通过将字符串转换为数组来解决许多算法。所以我想到了整合和比较各种方法来做同样的事情。

从字符串到数组的转换总是使用 split() 方法完成,但是在 ES6 之后,我们可以使用许多工具来做同样的事情。让我们一一介绍每种方法,并讨论每种方法的优缺点。

1、 使用 .split(''):

split() 是一种字符串方法,可将字符串拆分为具有模式的有序列表的数组。这是一种 ES6 方法,是完成工作的最干净的方法。

* Seperate string by space character(' ') *
const myFavShow = 'The Office';const myFavShowArray = myFavShow.split('');console.log(myFavShowArray) //['T', 'h', 'e', ' ', 'O', 'f', 'f', 'i', 'c', 'e']

这种方式的另一个优点是我们可以用字符或空格分隔字符串。以下是我们如何做到这一点的示例。

* Seperate string by whitespace(' ') *const myFavShow = 'The Office';const myFavShowArray = myFavShow.split(' ');console.log(myFavShowArray) //['The', 'Office']* Seperate string by a character '-' *const favDialogue = 'Thats-what-she-said';const favDialogueArr = favDialogue.split('-');console.log(favDialogueArr) //['Thats', 'what', 'she', 'said']

它也适用于正则表达式,你可以在此处找到 split() 的完整文档。

这种方式完美地将字符串元素分离到一个数组中,但它有其局限性。

注意:此方法不适用于不常见的 Unicode 字符。此方法返回字符的 Unicode 而不是实际字符,这可能会使我们的工作变得更复杂,但 MDN 文档已更新,因此,如果我们仅包含 u 标志,我们就可以使其与 Unicode 一起使用。

"😄😄".split(/(?:)/); // [ "\ud83d", "\ude04", "\ud83d", "\ude04" ]"😄😄".split(/(?:)/u); // [ "😄", "😄" ]

2、使用扩展语法 ([…str])

这是 ES2015 的特性,它使转换变得非常容易。

const myFavShow = 'The Office'
const myFavShowArray = [...myFavShow]
console.log(myFavShowArray) // ['T', 'h', 'e', ' ', 'O', 'f', 'f', 'i', 'c', 'e']

在这里消除了我们在 split() 中的限制也有帮助,考虑下面的例子,我们可以使用这种方法轻松拆分任何字符。

const animal = '🦊🦊'const animalArr = [...animal]console.log(animalArr) // ['🦊', '🦊']

3、使用 Array.from(str):

阵列,from() 方法从可迭代或类似数组的对象创建一个新的、浅拷贝的 Array 实例。

const myFavShow = 'The Office'
const myFavShowArray = Array.from(myFavShow);
console.log(myFavShowArray) // ['T', 'h', 'e', ' ', 'O', 'f', 'f', 'i', 'c', 'e']

这种方法在处理不常见的字符时不会引起任何问题。

const str = '😎😎'const arr = Array.from(str)console.log(arr)// ['😎', '😎']

4、使用 Object.assign([], str)

assign() 方法将一个或多个源对象的所有属性复制到目标对象。不过,关于这种方法有两点需要记住。一个是那个对象,二是assign() 复制称为深拷贝的属性值,在使用此方法之前,必须牢记这一点。

const myFavShow = 'The Office'
const myFavShowArray = Object.assign([], myFavShow);
console.log(myFavShowArray) // ['T', 'h', 'e', ' ', 'O', 'f', 'f', 'i', 'c', 'e']

另一个是我们和 split() 方法有同样的麻烦:它不能分隔不常见的字符(我们看到的是 Unicode 而不是实际的字符)。

const s = '😄😄'const a = Array.from(s)console.log(a) // ['😄', '😄']

5、使用老式方法(for loop 和 array.push())

虽然我们有很多选择可以玩,但我不得不提到这种老式的方法,我们使用 for 循环和数组方法 push() 来推送字符串的元素。

这不是最干净的方式,但绝对值得一提的是想要远离 JavaScript 不断变化的复杂性(尽管我更喜欢其他方式)。

const s = 'the office';const a = [];for (const s2 of s) {   a.push(s2);}console.log(a); // ['t', 'h', 'e', ' ', 'o', 'f', 'f', 'i', 'c', 'e']

此外,它对不常见 (Unicode) 字符也能很好地工作。看下面的例子。

const s = '𝟘𝟙𝟚𝟛😄😄';const a = [];for (const s2 of s) {   a.push(s2);}console.log(a); //['𝟘', '𝟙', '𝟚', '𝟛', '😄', '😄']

6、使用 Array.prototype.slice.call('string')

const favShow = Array.prototype.slice.call("The Office!");console.log(favShow); //['T', 'h', 'e', ' ', 'O', 'f', 'f', 'i', 'c', 'e', '!']

此方法也有与 split() 方法相同的问题,因此在使用时要注意。

const favShow = Array.prototype.slice.call("The Office!");console.log(favShow); //['\uD83D', '\uDE04', '\uD83D', '\uDE04']

结论

总而言之,以下是我们可以完成这项工作的方法。

这是我在 JavaScript 中将字符串转换为数组的 6 种方法的整理汇总。如果你使用任何其他方法来完成工作,请在留言区给我留言交流。

相关内容

热门资讯

122.(leaflet篇)l... 听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
Vue使用pdf-lib为文件... 之前也写过两篇预览pdf的,但是没有加水印,这是链接:Vu...
PyQt5数据库开发1 4.1... 文章目录 前言 步骤/方法 1 使用windows身份登录 2 启用混合登录模式 3 允许远程连接服...
Android studio ... 解决 Android studio 出现“The emulator process for AVD ...
Linux基础命令大全(上) ♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维...
再谈解决“因为文件包含病毒或潜... 前面出了一篇博文专门来解决“因为文件包含病毒或潜在的垃圾软件”的问题,其中第二种方法有...
南京邮电大学通达学院2023c... 题目展示 一.问题描述 实验题目1 定义一个学生类,其中包括如下内容: (1)私有数据成员 ①年龄 ...
PageObject 六大原则 PageObject六大原则: 1.封装服务的方法 2.不要暴露页面的细节 3.通过r...
【Linux网络编程】01:S... Socket多进程 OVERVIEWSocket多进程1.Server2.Client3.bug&...
数据结构刷题(二十五):122... 1.122. 买卖股票的最佳时机 II思路:贪心。把利润分解为每天为单位的维度,然后收...
浏览器事件循环 事件循环 浏览器的进程模型 何为进程? 程序运行需要有它自己专属的内存空间࿰...
8个免费图片/照片压缩工具帮您... 继续查看一些最好的图像压缩工具,以提升用户体验和存储空间以及网站使用支持。 无数图像压...
计算机二级Python备考(2... 目录  一、选择题 1.在Python语言中: 2.知识点 二、基本操作题 1. j...
端电压 相电压 线电压 记得刚接触矢量控制的时候,拿到板子,就赶紧去测各种波形,结...
如何使用Python检测和识别... 车牌检测与识别技术用途广泛,可以用于道路系统、无票停车场、车辆门禁等。这项技术结合了计...
带环链表详解 目录 一、什么是环形链表 二、判断是否为环形链表 2.1 具体题目 2.2 具体思路 2.3 思路的...
【C语言进阶:刨根究底字符串函... 本节重点内容: 深入理解strcpy函数的使用学会strcpy函数的模拟实现⚡strc...
Django web开发(一)... 文章目录前端开发1.快速开发网站2.标签2.1 编码2.2 title2.3 标题2.4 div和s...