到目前为止,我有这个:
var text = 'This is a sentence.';
var character;
var vowelAmount = {
a = 0,
e = 0,
i = 0,
o = 0,
u = 0
}
for (i = 0; i < text.length; i++){
character = text.charAt(i);
for (var key in vowelAmount){
if (key == character){
vowelAmount[key]++;
}
}
}
for (var key in vowelAmount){
document.write(key + '<br>');
}
应该在文本中显示所有元音,但是它什么也没做。 我敢肯定有一种方法可以更有效地做到这一点,但是我想保留这种结构,因为它是用于学校的,他们不想让我用于循环...
答案 0 :(得分:1)
根据我的评论:如果您的代码不起作用,请始终记住首先检查您的浏览器控制台:它始终包含有关出现问题的非常有用的信息。就您而言,第一个错误是在对象声明中使用=
。请改用:
。
此外,您的代码块:
for (var key in vowelAmount){
document.write(key + '<br>');
}
...仅用于打印对象中的键(例如a
),而不是其值(每个元音的计数)。要访问键值对中的对象中的值,可以通过其索引vowelAmount[key]
来访问它。
有关工作示例,请参见下面的概念验证:
var text = 'This is a sentence.';
var character;
var vowelAmount = {
a: 0,
e: 0,
i: 0,
o: 0,
u: 0
}
for (var i = 0; i < text.length; i++){
character = text.charAt(i);
for (var key in vowelAmount){
if (key == character){
vowelAmount[key]++;
}
}
}
for (var key in vowelAmount){
document.write(key + ': ' + vowelAmount[key] + '<br>');
}
另一方面,我通常强烈建议不要使用document.write
,因为它会覆盖文档中的所有内容。您应该改为创建一个新元素,并将其附加到DOM本身。甚至更好:如果您希望示例在语义上100%正确,那么最好的选择是使用无序列表。
此外,您不需要重复嵌套for
循环:您可以直接针对vowelAmount
对象检查字符:
var text = 'This is a sentence.';
var character;
var vowelAmount = {
a: 0,
e: 0,
i: 0,
o: 0,
u: 0
}
for (var i = 0; i < text.length; i++){
character = text.charAt(i);
if (character in vowelAmount) {
vowelAmount[character]++;
}
}
// Create dummy `<ul>` parent
var ul = document.createElement('ul');
// Iterate through your object and create new `<li>` element per key-value pair
// Also, once the `<li>` is created, we then inject it into `<ul>`
for (var key in vowelAmount){
var li = document.createElement('li');
li.textContent = key + ': ' + vowelAmount[key];
ul.appendChild(li);
}
// When you're done, we can append `<ul>` to the body
document.body.appendChild(ul);
答案 1 :(得分:0)
您需要更正对象创建语法。在显示每个元音的计数时,还请注意更改。
var text = 'This is a sentence.';
var character;
var vowelAmount = {
a : 0,
e : 0,
i : 0,
o : 0,
u : 0
}
for (i = 0; i < text.length; i++){
character = text.charAt(i);
for (var key in vowelAmount){
if (key == character){
vowelAmount[key]++;
}
}
}
for (var key in vowelAmount){
document.write(key + '='+vowelAmount[key]+'<br>');
}
答案 2 :(得分:0)
由于这是上学,因此我不会通过提供工作代码来给您喂食,但我鼓励您看一下以下几点:
您对vowelAmount
的对象语法不正确。使用键值对设置对象。使用:
(冒号)的左侧和冒号右侧的值定义键的位置。在您的示例中,您正在使用=
。这必须是冒号:
。
例如:
var person = {
name: 'Nick', /* NOT: name = 'Nick' */
age: 1000 /* NOT: age = 1000 */
}
您的下一个问题是如何显示您的价值观。目前,您仅在对象中显示key
。如果要显示key
和value
(即元音和元音计数),则需要使用bracket notation访问value
。
例如:
var key = 'name';
console.log(person[key]); // gives back "Nick"
使用这些想法,您应该能够解决问题。
答案 3 :(得分:0)
我认为,这就是您想要的。
您的代码中有几个错误。
:
代替=
。
var text = 'This is a sentence.';
var character;
var vowelAmount = {
a: 0,
e: 0,
i: 0,
o: 0,
u: 0
}
for (const char of text) {
if (vowelAmount.hasOwnProperty(char)) {
vowelAmount[char] += 1;
}
}
console.log('vowelAmount = ', vowelAmount);