链表是 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() 的完整文档。
这些方法完美地将字符串元素分离到链表中数组转字符串php,但它有其局限性。
注意:此方法不适用于不常见的 Unicode 字符。 此方法返回字符的 Unicode,而不是实际字符,这可能会使我们的工作显得更复杂,但 MDN 文档已更新,因此如果我们只包含 u 标志,我们就可以使其与 Unicode 一起使用。
":smile::smile:".split(/(?:)/); // [ "ud83d", "ude04", "ud83d", "ude04" ] ":smile::smile:".split(/(?:)/u); // [ ":smile:", ":smile:" ]
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 = ':sunglasses::sunglasses:' const arr = Array.from(str) console.log(arr) // [':sunglasses:', ':sunglasses:']
4.使用Object.assign([],str)
allocate() 方法将一个或多个源对象的所有属性复制到目标对象。 然而数组转字符串php,关于这些技术有两点需要记住。 一是哪个对象,二是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 = ':smile::smile:' const a = Array.from(s) console.log(a) // [':smile:', ':smile:']
5. 使用旧样式(forloop 和 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 = ' :smile::smile:'; const a = []; for (const s2 of s) { a.push(s2); } console.log(a); //[' ', ' ', ' ', ' ', ':smile:', ':smile:']
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 种方法的综述。 如果您使用其他方式完成工作,请在留言区给我留言交流。
发表评论