Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
代码战挑战javascript_Javascript_Arrays_Function_Loops - Fatal编程技术网

代码战挑战javascript

代码战挑战javascript,javascript,arrays,function,loops,Javascript,Arrays,Function,Loops,我希望大家今天过得愉快 这是我第一次在Stackoverflow上发表文章 我刚刚完成了关于codeacademy的javascript课程,还读了几本关于它的书。现在我正在进行代码战。我认为自己是Javascript的初学者 我发现自己在挑战中有点受困,请问有人能解释一下我可能做错了什么吗?非常感谢 以下是说明: 检查字符串是否具有相同数量的“x”和“o”。该方法必须返回布尔值且不区分大小写。字符串可以包含任何字符 这是我的代码: function XO(str) { var x =

我希望大家今天过得愉快

这是我第一次在Stackoverflow上发表文章

我刚刚完成了关于codeacademy的javascript课程,还读了几本关于它的书。现在我正在进行代码战。我认为自己是Javascript的初学者

我发现自己在挑战中有点受困,请问有人能解释一下我可能做错了什么吗?非常感谢

以下是说明:

检查字符串是否具有相同数量的“x”和“o”。该方法必须返回布尔值且不区分大小写。字符串可以包含任何字符

这是我的代码:

function XO(str) {
    var x = [];
    var o = [];

    for (var i = 0; i <= str.length; i++) {
        if (str(i).toLowerCase === "x") {
            x.push(i);
        } else if (str(i).toLowerCase === "o") {
            o.push(i);
        }

        if (x.length === o.length) {
            return true;
        } else {
            return false;
        }
    }
}

str.match/x/g.length==str.match/o/g.length

第三个if-else将永远不会执行,因为对于字符串,总是有一个值

如果要返回计数,则应在for循环之后执行长度检查

var xCount = 0; var oCount = 0;
for (var i = 0; i < str.length; i++) {
  if (str[i].toLowerCase() === "x") {
    xCount++;
  } else if (str[i].toLowerCase() === "o") {
    oCount++;
  }
}

return xCount === oCount;
关于另一个包含基于str.match方法的检查的解决方案,使用这段代码的复杂性是上面的两倍,因为str.match循环执行两次以匹配两个字符串

函数checkIfOequalsXstr{ 返回str.match/x/g.length==str.match/o/g.length } 控制台。logcheckIfOequalsX'xxooxo';
控制台。logcheckIfOequalsX'xxooxoo' 我纠正了错误,并使用代码注释进行解释

功能XOstr{ var x=[]; var o=[]; 对于var i=0;iconsole.logXO'xoOX' 可以使用正则表达式查找这些字符:

function XO(str) {
 return str.match(/o/ig).length === str.match(/x/ig).length;
}

将长度检查从循环中移出您的代码格式不好为什么不使用内置字符串函数?这是最好的答案,因为您只需循环一次。如果循环一次或两次,复杂性是相同的。执行的指令数与另一个答案有关,肯定还有另一个问题,但O时间不是vs O2n吗?您需要使用toLowerCase而不是toLowerCase,因为后者是函数代码,而前者是函数返回的值,换句话说,stri.toLowerCase===x对于任何字符stri都是正确的。非常感谢,并感谢所有回应的人。我还想问,如果我用[I]而不是I,有什么区别……我知道[I]在某种程度上可以遍历数组的索引,但当人们在I方法中使用它时,我有点困惑。我知道这对很多人来说可能是一个愚蠢的问题,但正如前面提到的,我才刚刚开始使用javascript。感谢您,方法调用使用了两个属性。比如str[i].toLowerCase。这里toLowerCase是一个方法。尖括号[]用于访问或更改JSON或数组数据对象中的值。两者是完全不同的东西。
function XO(str) {
  let strn = str.toLowerCase();
  let countX = []; 
  let countO = []; 
  for(let i=0; i<strn.length; i++) {
    if(strn[i] == 'x') {
      countX.push(strn[i])
    } else if(strn[i] == 'o') {
      countO.push(strn[i])
    }
  }

  if(countX.length == countO.length){
    return true
  } else if(countX.length !== countO.length) {
    return false
  }
}
function XO(str) {
 return str.match(/o/ig).length === str.match(/x/ig).length;
}