2017-01-11 22 views
0

我在寫一個函數,它接受一個字符串,通過使用.split方法將字符串轉換爲數組來搜索emojis ,該函數然後根據數組值查找emoji值,並在找到匹配項時返回一個字符串。當所有完成後,我們.join我們的數組創建一個字符串。object使用Array.split,Array.filer和Array.map格式化字符串後的字符串對象

所以取,例如當前字符串使用表情符號(我得到這個從用戶輸入):

我喜歡搖滾

在我的組件上面的字符串是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

filter()方法返回一個匹配過濾器的元素數組;你將它視爲會返回單個元素。

所以,你期望filter返回'smile'而是返回['smile']。並且加入正在編碼爲[object Object]

如果你確定你一定會找到數組中只有一個比賽,你可以在filter調用(filter(...)[0])結束粘[0] ...但這時如果你一定會找到一個正好匹配,爲什麼使用filter

如果你可能得到0或多個匹配,我認爲你可以join()什麼filter返回,然後返回結果爲您的最終join()整個字符串。

+0

啊!!!天哪!你是對的!我不需要過濾器!我在想什麼? –