Javascript - 计算变量中特定字符串的实例数
Javascript - Count the number of instances of a particular string from a variable
我无法让我的代码计算单词"Yes"在变量中出现的次数。 如果我用字符串"是是是"替换变量,它会起作用。 结果为 3。 我想做同样的事情,但从一个变量。
这是我的代码。
function getAllAnswers() {
var var_allAnswers = document.querySelector('input[name="Q1"]:checked').value + document.querySelector('input[name="Q2"]:checked').value + document.querySelector('input[name="Q3"]:checked').value + document.querySelector('input[name="Q4"]:checked').value + document.querySelector('input[name="Q5"]:checked').value + document.querySelector('input[name="Q6"]:checked').value + document.querySelector('input[name="Q7"]:checked').value + document.querySelector('input[name="Q8"]:checked').value + document.querySelector('input[name="Q9"]:checked').value + document.querySelector('input[name="Q10"]:checked').value + document.querySelector('input[name="Q11"]:checked').value + document.querySelector('input[name="Q12"]:checked').value + document.querySelector('input[name="Q13"]:checked').value + document.querySelector('input[name="Q14"]:checked').value + document.querySelector('input[name="Q15"]:checked').value + document.querySelector('input[name="Q16"]:checked').value + document.querySelector('input[name="Q17"]:checked').value + document.querySelector('input[name="Q18"]:checked').value + document.querySelector('input[name="Q19"]:checked').value + document.querySelector('input[name="Q20"]:checked').value;
document.getElementById("AllAnswers").innerHTML = var_allAnswers;
}
function yesCount() {
var var_yesCount = var_allAnswers.split("Yes").length - 1;
document.getElementById("YesCount").innerHTML = var_yesCount;
}
function noCount() {
var var_noCount = var_allAnswers.split("No").length - 1;
document.getElementById("NoCount").innerHTML = var_noCount;
}
这是我的标记。
<button onclick="yesCount()">Yes Count</button><br/>
Yes Count: <p id="YesCount"></p><br/><br/>
<button onclick="noCount()">No Count</button><br/>
No Count: <p id="NoCount"></p><br/><br/>
All Answers: <p id="AllAnswers"></p><br/><br/>
有人有什么想法吗?
在yesCount
和noCount
函数中调用的变量var_allAnswers
超出范围,这意味着您的函数无法访问它。一个有点黑客的修复:
(function()
{
var var_allAnswers;
function getAllAnswers() {
var_allAnswers = document.querySelector('input[name="Q1"]:checked').value + document.querySelector('input[name="Q2"]:checked').value + document.querySelector('input[name="Q3"]:checked').value + document.querySelector('input[name="Q4"]:checked').value + document.querySelector('input[name="Q5"]:checked').value + document.querySelector('input[name="Q6"]:checked').value + document.querySelector('input[name="Q7"]:checked').value + document.querySelector('input[name="Q8"]:checked').value + document.querySelector('input[name="Q9"]:checked').value + document.querySelector('input[name="Q10"]:checked').value + document.querySelector('input[name="Q11"]:checked').value + document.querySelector('input[name="Q12"]:checked').value + document.querySelector('input[name="Q13"]:checked').value + document.querySelector('input[name="Q14"]:checked').value + document.querySelector('input[name="Q15"]:checked').value + document.querySelector('input[name="Q16"]:checked').value + document.querySelector('input[name="Q17"]:checked').value + document.querySelector('input[name="Q18"]:checked').value + document.querySelector('input[name="Q19"]:checked').value + document.querySelector('input[name="Q20"]:checked').value;
document.getElementById("AllAnswers").innerHTML = var_allAnswers;
}
function yesCount() {
var var_yesCount = var_allAnswers.split("Yes").length - 1;
document.getElementById("YesCount").innerHTML = var_yesCount;
}
function noCount() {
var var_noCount = var_allAnswers.split("No").length - 1;
document.getElementById("NoCount").innerHTML = var_noCount;
}
})();
尽管您实际上应该在函数调用中将var_allAnswers
变量作为参数传递。
您在 getAllAnswers()
中声明的局部变量var_allAnswers
不能在另一个函数中使用,相反,您应该将变量声明为 Global 或创建一个返回要处理的变量的函数。前任:
var var_allAnswers;
function getAllAnswers() {
var_allAnswers = document.querySelector('...
document.getElementById("AllAnswers").innerHTML = var_allAnswers;
}
getAllAnswers();
看来你在这里有一个范围问题。var 定义了一个变量,该变量仅在包含它的块中可用 { }因此,当您退出getAllAnswers()时,您的变量var_allAnswers将被丢弃。
您需要先重新初始化它,然后才能重用它
function yesCount() {
var_allAnswers = document.querySelector('input[name="Q1"]:checked').value
var var_yesCount = var_allAnswers.split("Yes").length - 1 ;
document.getElementById("YesCount").innerHTML = var_yesCount;
}
我也认为这是一个范围问题。
在 yesCount() 和 noCount() 函数中,变量 var_allAnswers 不能被引用。马塞尔的回答是对的。
你可能想了解javascript中的块作用域。这是一篇关于此的文章:
http://danbeam.org/blog/2011/05/23/turns-out-there-is-block-scope-in-javascript-kinda/
相关文章:
- 删除数组Javascript中字符串的所有实例
- 如何通过JS在不干扰其标记的情况下更改HTML文档中字符串的所有实例
- 是否有将基于字符串的JSON转换为Mongoose Schema对象实例的本地功能
- JavaScript:计算字符串中特定整数的实例
- 从 Node.js 模块中的缓冲区实例中逐行读取字符串
- 正则表达式来更改字符串中的所有实例
- javascript正则表达式,将多个实例替换为多行字符串中的单个实例
- 如何更改字符串/符号的所有实例的样式
- 替换字符串中YouTube/Vimeo iframe的所有实例
- 字符串是对象 String() 的实例吗?
- 我们如何在 javascript 对象中使用字符串名称存储创建 Backbone 视图的实例
- 如何匹配并返回一个字符串的多个实例,其中单个撇号可以包含在任何索引中
- Jquery:在一个字符串中查找所有实例模式,提示用户替换模式的所有实例,然后进行替换
- Ember.js:使用模型实例的路由获取模型实例的 url 字符串
- 如何在 JavaScript 中替换字符串中“+”的多个实例
- 查找字符串中单词所有实例的位置,在控制台中得到不需要的重复
- 正则表达式 Express 将反斜杠 的每个实例替换为字符串中的 u
- 按第三个实例拆分字符串
- Javascript向字符串实例添加方法
- 无法从JSON字符串实例化类型的值;没有单字符串构造函数/工厂方法