Javascript - 计算变量中特定字符串的实例数

Javascript - Count the number of instances of a particular string from a variable

本文关键字:字符串 实例 计算 变量 Javascript      更新时间:2023-09-26

我无法让我的代码计算单词"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/>

有人有什么想法吗?

yesCountnoCount函数中调用的变量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/