2015-09-01 47 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>

相关问题