Pig Latin 兒童黑話

What is "Ping Latin" ?
  什麼是兒童黑話-是一種英語語言遊戲,形式是在英語上加上一點規則使發音改變。 簡單來說就是對於字母的子母音做的一些簡單的變換。 規則如下: 如果以母音開頭則在單詞尾端加上"way","yay","hay"等等,而如果是以子音為首的詞彙的字,則將前面到第1個母音前的子音移到字尾,並加上"ay"。 wiki here

Ex:
beast → east-bay
dough → ough-day
happy → appy-hay
question → estion-quay
star → ar-stay
three → ee-thray
algorithm → algorithmway

    而在這道題目的變化規則裡,是不需要加負號(-)的,其實有沒有加負號都沒有差因為只要在字串裡面多打個負號就好了

function translate(str) {
      var vowel =['a', 'e', 'i', 'o', 'u'];
      var position = 10;
      vowel.forEach(function(emt)
      {
        if(str.indexOf(emt) !== -1 && position > str.indexOf(emt))
        {
          position = str.indexOf(emt);
        }         
      });
      return (position !== 0 ) ? str.substr(position) + str.substr(0, position).concat('ay') :  str.concat('way');
    }

translate("consonant");
translate("paragraphs");
translate("glove");
translate("algorithm");

Solution:

解題關鍵就是找出第1個位置最前面的母音,然後我目前想到的解法有兩種,一種是用母音部分的陣列元素以迴圈方式去找位置位於最前面的母音字母,第2種就是逐字母在單字的排列順序一個一個去母音陣列搜尋,我用第1種方法寫了,其中position一開始設10,會隨著逐母音字母用indexOf()搜尋的回傳位置,而改變大小,因為要找到最前面的母音,所以條件式就是當目前所找到的母音位置小於position(之前所找到的母音位置)時,就回傳該位置,然後用運算子?:(跟if功用一樣,問號後面放if成立的動作,:後面放false發生時要做的事),判斷如果position為第1個字母則在單字尾巴加上"way",就是依照兒童黑話的規則,最近都在想用比較簡潔的方法寫code。 str.substr(position)功用為從原始字串中第1個母音位置開始擷取字串到字串尾端



P.S. / Reference:  indexOf()功用:返回給定元素能找在數組(array)中找到的第一個索引值,否則返回-1。
   substr功用: substr(start, length) 方法返回字符串中從指定位置開始到指定位置(長度)的子字符串(或直到字符串的末尾 不寫length時)。
   start開始提取字符的位置。如果為負值,則被看作 strLength + start,其中 strLength 為字符串的長度(例如,如果 start 為 -3,則被看作 strLength-3)。length可選。提取的字符數。 -1為倒數第1個字元(最後一個)、所以如果要從後面取長度n的字串則語法為str.substr(-n, 欲提取字串長度)

results matching ""

    No results matching ""