object使用Array.split,Array.filer和Array.map格式化字符串后的字符串对象

时间:2017-01-11 13:29:36

标签: javascript arrays typescript

我正在编写一个带字符串的函数,通过使用.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也可以。

1 个答案:

答案 0 :(得分:0)

filter()方法返回与过滤器匹配的元素数组;你把它看作是回归一个元素。

因此,您希望filter返回'smile',而是返回['smile']。并且join将其字符串化为[object Object]

如果您确定自己总能在数组中找到一个匹配项,那么您可以在[0]调用(filter)结束时粘贴filter(...)[0] ...但是如果你总能找到一个匹配,为什么要使用filter

如果你可能得到0或多个匹配,我认为你可以join() filter返回什么,然后将结果返回给整个字符串的最终join()

相关问题