繁体   English   中英

为什么第二个数组保持为空?

[英]Why does the second array remain empty?

此“计数器”的目标是查看“ ToCount”字符串中有多少个不同的单词。 为此,它使ToCount成为数组,然后遍历元素,检查它们是否已经存在,如果不存在,则将它们添加到那里。

循环后,ToCountArr2保持为空,长度为0。 为什么会发生这种情况,我该怎么办?

我运行了一个调试器,发现没有元素添加到第二个列表中,好像如果第一个数组的第i个元素已经在第二个数组中,则“ if”控件中没有任何内容。

function counter(){
    var ToCount = document.getElementById("demo").value; //the contents of a textbox
    var ToCountArr1 = ToCount.split(" ");
    var ToCountArr2 = new Array;
    var i = 0;
    var lengthToCountArr1 = ToCountArr1.length;
    var wordToPush;
    while (i < lengthToCountArr1){
    if(ToCountArr2.includes(ToCountArr1[i] === false)) {
            wordToPush = ToCountArr1[i];
            ToCountArr2.push(wordToPush);
        }
        i = i + 1;
    }
    alert(ToCountArr2.length);
}

问题在于这一行if(ToCountArr2.includes(ToCountArr1[i] === false)) 在这里,花括号必须ToCountArr1[i] ,其中,这行ToCountArr1[i] === false)正在检查ToCountArr1中的值是true还是false。

这条线

if(ToCountArr2.includes(ToCountArr1[i] === false))将被评估为

if(ToCountArr2.includes(true/false))取决于ToCountArr1[i] === false)

 function counter() { var ToCount = document.getElementById("demo").value; //the contents of a textbox var ToCountArr1 = ToCount.split(" "); var ToCountArr2 = new Array; var i = 0; var lengthToCountArr1 = ToCountArr1.length; var wordToPush; while (i < lengthToCountArr1) { if (ToCountArr2.includes(ToCountArr1[i]) === false) { wordToPush = ToCountArr1[i]; ToCountArr2.push(wordToPush); } i = i + 1; } console.log(ToCountArr2.length); } counter() 
 <input type='text' id='demo' value='Test Values'> 

您可以将if (ToCountArr2.includes(ToCountArr1[i]) === false) {

if (!ToCountArr2.includes(ToCountArr1[i])) {

您的wordcount函数应该使用一个参数,以便您可以传入字符串。这意味着您可以在任何字符串上使用wordcount函数,而不仅仅是“ demo”元素。 另外,这是学习Map的好时机-

 const wordcount = (str = "") => { const result = new Map for (const s of str.split(/ /)) if (s === "") continue else if (result.has(s)) result.set(s, result.get(s) + 1) else result.set(s, 1) return Array.from(result.entries()) } const prettyPrint = (value) => console.log(JSON.stringify(value)) 
 <!-- pass this.value as the string for wordcount -- wordcount returns a value that we could use elsewhere -- prettyPrint displays the value to the console --> <input onkeyup="prettyPrint(wordcount(this.value))"> 

运行代码段并将以下行复制/粘贴到字段中-

this is the captain speaking. is this the commander?

您将看到此输出-

[["this",2],["is",2],["the",2],["captain",1],["speaking.",1],["commander?",1]]

这是一个工作示例。 我认为这会帮助您正确的方法。 在这里,我使用indexOf来检查数组中是否存在该值。

function counter(){
    var ToCount = "I am string just for text.";//document.getElementById("demo").value; //the contents of a textbox
    var ToCountArr1 = ToCount.split(" ");
    var ToCountArr2 = new Array;
    var i = 0;
    var lengthToCountArr1 = ToCountArr1.length;
    var wordToPush;
    while (i < lengthToCountArr1){
    if( ToCountArr2.indexOf(ToCountArr1[i]) == -1 ) {
            wordToPush = ToCountArr1[i];
            ToCountArr2.push(wordToPush);
        }
        i = i + 1;
    }
    alert(ToCountArr2.length);
}
counter();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM