我正在编写一个带字符串的函数,通过使用.split
方法将字符串转换为数组来搜索表情符号的emojis,然后该函数根据数组值查找表情符号值当它找到匹配时,它返回一个字符串。完成所有操作后,我们.join
我们的数组创建一个字符串。
所以,例如使用emojis的当前字符串(我从用户输入得到这个):
我喜欢摇滚乐
在我的组件中,上面的字符串是this.message
,这是我的代码:
emojiLookup() {
let splitMessage = this.message.split(/([\uD800-\uDBFF][\uDC00-\uDFFF])/g);
this.message = splitMessage.map((a) => {
if(this.isItemEmoji(a)) {
return this.emojiList.filter((em) => { // this.emojiList is an array list to match the emoji value to a keyword
if(this.emojiToUnicode(a) === em.unicode) {
return (em.aliases[0]); // this value is a string e.g. 'smile'
}
});
} else {
return a;
}
}).join('');
console.log(this.message);
}
this.emojiLookup(this.message);
// helper methods used abive
isItemEmoji(s:string) {
return /\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g.test(s);
}
emojiToUnicode(emoji: any) {
if(emoji){
return '\\u' + emoji.charCodeAt(0).toString(16) + '\\u' + emoji.charCodeAt(1).toString(16);
}
}
现在所有似乎都在工作但是当我输出我转换后的this.message
时,我得到以下内容:
I like ro[object Object]ck and roll [object Object][object Object]
我不清楚为什么[object Object]
出现而不是我从return (em.aliases[0])
返回的字符串?我检查了return (em.aliases[0])
的值,它总是一个字符串......我做错了什么?
我在Angular2应用程序中使用TypeScript。 lodash也可以。
答案 0 :(得分:0)
filter()
方法返回与过滤器匹配的元素数组;你把它看作是回归一个元素。
因此,您希望filter
返回'smile'
,而是返回['smile']
。并且join将其字符串化为[object Object]
。
如果您确定自己总能在数组中找到一个匹配项,那么您可以在[0]
调用(filter
)结束时粘贴filter(...)[0]
...但是如果你总能找到一个匹配,为什么要使用filter
?
如果你可能得到0或多个匹配,我认为你可以join()
filter
返回什么,然后将结果返回给整个字符串的最终join()
。