使用扩散语法从包含表情符号的字符串中筛选空字符串 [英] Filtering empty strings from a string containing emojis using spread syntax

查看:0
本文介绍了使用扩散语法从包含表情符号的字符串中筛选空字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图保持时髦,所以我一直在玩spread operator和表情包。我注意到,当我想要filter空字符串('')移出得到的"扩展"数组时,空字符串并没有被删除。为什么会这样?

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
console.log([...'😀︎']);                 // ['😀︎', '']
console.log([...'😀︎'].filter(String));  // ['😀︎', '']
console.log(['😀︎', ''].filter(String)); // ['😀︎']

推荐答案

字符串中有一个不可见字符,它是variation selector。如果您打印字符代码,您可以看到:

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
console.log([...'😀︎'].map(s => s.charCodeAt(0)));

如果您的目标是删除该特定variation selector 15,则只需使用replace

s.replace(/ufe0e/g, '')

请注意,在第三个语句的输出中,表情符号略有不同。这是变体选择符的效果,您从前两个语句中的第一个字符中去掉了它。尽管该特殊字符本身不打印任何内容,并且在隔离时显示为空字符串,但它实际上不是空的,因此filter不会将其排除。

Emoji字符本身位于单个单词UTF-16范围之外,因此它们占用两个单词。

当您用split拆分这样的单字符字符串时,您会得到两个单独的字符(这是历史上的一个奇怪的JavaScript),它们代表UTF编码。如果您的目标是计算字符串中的表情符号(和其他高范围字符),则可以使用以下代码:

console.log(s.split('').length - [...s].length);

这篇关于使用扩散语法从包含表情符号的字符串中筛选空字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
前端开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆