2015-09-01 48 views
0

我使用下表中的百分比來顯示某個元素之後的字母是否是元音或輔音。用JavaScript數組在字符串中添加兩個字母的百分比

a: C= 90%, V= 7% 
b: C= 32%, V= 65% 
c: C= 40%, V= 59% 
d: C= 17%, V= 77% 
e: C= 79%, V= 14% 
f: C= 31%, V= 68% 
g: C= 35%, V= 57% 
h: C= 8%, V= 85% 
i: C= 82%, V= 16% 
j: C= 0%, V= 98% 
k: C= 18%, V= 71% 
l: C= 26%, V= 74% 
m: C= 14%, V= 83% 
n: C= 49%, V= 47% 
o: C= 79%, V= 15% 
p: C= 43%, V= 57% 
q: C= 0%, V=100% 
r: C= 31%, V= 64% 
s: C= 61%, V= 36% 
t: C= 28%, V= 67% 
u: C= 90%, V= 9% 
v: C= 1%, V= 99% 
w: C= 22%, V= 71% 
x: C= 15%, V= 72% 
y: C= 58%, V= 24% 
z: C= 7%, V= 91% 

例如,有一個58%的機會,之後Ÿ信將是一個輔音。

我有以下值的數組:

var arr = ["Cookie", "Bird", "Flower"]; 

我需要的JavaScript經過的每個元素,並採取各項工作,並添加了百分比,如果他們不佔多數。例如:


的Cookie:

CO < - 由於一個C將要的O是多數內,59%,沒有將被添加。

OO < - 由於一個O將一個O(元音元音)沒有在大多數(只有15%的病例)79%將被添加

< - 由於它是一個O去K(元音輔音),什麼都不會添加。

KI < - 因爲它的K去I(輔音元音),所以什麼都不會添加。

IE < - 由於一個I要一個E(元音元音)沒有在大多數(只有16%的病例)82%將被添加


在端,應該是79%+ 82%= 。我有以下代碼適用於字符串,而不是陣列

var str = 'Cookie'; 
for (var i = 0, len = str.length; i < len; i++) { 
    console.log(str[i] + str[i + 1]); 
} 

這給在控制檯下面的輸出:

CO 
OO 
OK 
KI 
IE 

所以我有一個字符串下來的基本功能,但我將如何得到它與一個數組的工作,並添加比例?

+1

什麼是你的百分比表的JavaScript的數據格式?您沒有以真正的Javascript格式顯示數據,因此如果您向我們顯示數據的確切Javascript格式,我們只能提供實際的工作代碼。 – jfriend00

回答

0

要應用功能的陣列,可以使用ES5 Array.prototype.forEach像這樣:

arr.forEach(function() { 
    for (var i = 0, len = str.length; i < len; i++) { 
     console.log(str[i] + str[i + 1]); 
    } 
} 

這是一切都很好時,只打印到控制檯,但因爲你似乎想從製圖你的話到分數,你應該檢查出Array.prototype.map

至於檢查你是否擊中了一個輔音或一個元音,你應該聲明var vowels = ['a', 'e', 'i', 'o', 'u']並使用Array.prototype.indexOf來檢查你是否有元音。然後,您可以使用布爾運算符來查明元音或輔音是否佔大多數,並從那裏創建您的分數函數。

更新x in object優於Array.prototype.indexOf

你應該元音存儲爲一個JavaScript對象鍵:

vowels = {'a': true, 'e': true, 'i': true, 'o': true, 'u': true} 

然後'a' in vowels回報true'b' in vowels回報false。這比在陣列上調用indexOf快得多。

請注意,您所分配的值並不真正的問題在這裏,但它允許評估vowels['a']代替'a' in vowels,但我相信這將是一個更昂貴的操作,但也許你會想有條件打折e爲無論什麼原因:你可以設置vowels['e'] = false

+1

不,元音應該放在一個對象中,而不是一個數組,然後對它們進行測試可以在散列中存在某些東西時進行測試。 Array.prototype.indexOf是一個昂貴的操作,它需要每次循環數組。 –

+0

很大的改進;我會更新。 –

+0

對於一個非常小的陣列來說可能並不重要,但一般來說它是首選 –

0

以下是一種在JavaScript中迭代數組的方法,與迭代字符串非常相似。

var array = ['Cookie','Bird','Flower']; 
for (var j = 0, j = array.length; j++) { 
    var str = array[j]; 
    //... 
} 

在這個循環中,你可以通過串迭代和運用你的邏輯

var array = ['Cookie','Bird','Flower']; 
for (var j = 0, j = array.length; j++) { 
    var str = array[j]; 

    for (var i = 0, i < str.length; i++) { 
    // your logic 
    } 
} 
1

我們可以使用Array.prototype.reduce得到一個非常乾淨的分組,當前變量,所以我們可以很容易地比較的過渡。你只需要檢查當前字符是否實際是一個元音。然後你檢查轉換的概率,如果它高於50,你將使用轉換的相反值並將其添加到累加器。就是這樣。

但有一件事,我沒有覆蓋對字符串數組的迭代。主要是因爲我沒有一個對象的全部統計信息,所以我只能提供一個工作字符串。

var options = { 
 
    c: { 
 
    C: 40, 
 
    V: 59 
 
    }, 
 
    o: { 
 
    C: 79, 
 
    V: 15 
 
    }, 
 
    k: { 
 
    C: 18, 
 
    V: 71 
 
    }, 
 
    i: { 
 
    C: 82, 
 
    V: 16 
 
    }, 
 
    e: { 
 
    C: 79, 
 
    V: 14 
 
    } 
 
} 
 

 
var vowels = { 
 
    a : true, 
 
    e : true, 
 
    i : true, 
 
    o : true, 
 
    u : true 
 
    } 
 

 
function isVowel(chr){ 
 
    if(vowels[chr] !== undefined){ 
 
    return true; 
 
    } else { 
 
     return false; 
 
     } 
 
    } 
 

 
var results = document.getElementById('results'); 
 
var string = 'Cookie'; 
 
var acc = 0; 
 
Array.prototype.reduce.call(string, function(prev, current) { 
 
    if (prev != '') { 
 
    var key = isVowel(current) ? 'V' : 'C'; 
 
    var keyOpp = key == 'V' ? 'C' : 'V'; 
 
    var letter = options[prev.toLowerCase()]; 
 
    var transition = letter[key]; 
 
    results.innerHTML += (prev + current + '\n').toUpperCase(); 
 
    var opp = letter[keyOpp]; 
 
    if(transition < 50){ 
 
     acc += opp; 
 
     } 
 
    } 
 
    return current; 
 
}, ''); 
 

 
results.innerHTML += 'Sum : ' + acc;
<pre id="results"></pre>

相關問題