codewar挑战javascript

时间:2017-08-13 14:30:55

标签: javascript arrays function loops

我希望每个人都过得愉快。

这是我在Stackoverflow上发表的第一篇文章!

我刚刚完成了关于codeacademy的javascript课程,并且已经阅读了几本关于它的书籍。现在我在代码战中。我会把自己归类为Javascript中的初学者。

我发现myslef有点卡在挑战上,请有人能说明我可能做错了吗?非常感谢提前!

以下是说明:

检查字符串是否具有相同数量的' 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;
        }
    }
}

7 个答案:

答案 0 :(得分:1)

function XO(str) {
    var x = 0; // number are better
    var o = 0;

    for (var i = 0; i < str.length; i++) { // changed from '<=' to '<'
        if (str[i].toLowerCase() === "x") {
            x++;
        } else if (str[i].toLowerCase() === "o") {
            o++;
        }
    }
    return x === o;
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

第三个if if永远不会被执行,因为对于一个字符串,总会有一个值。

如果要返回计数,则应在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循环执行两次以匹配两个字符串。

答案 3 :(得分:0)

function checkIfOequalsX(str){
  return str.match(/x/g).length==str.match(/o/g).length
}

console.log(checkIfOequalsX('xxooxo'));
console.log(checkIfOequalsX('xxooxoo'));

你可以用

来做
str.match(/x/g).length==str.match(/o/g).length

答案 4 :(得分:0)

我纠正了错误并使用代码注释来解释

&#13;
&#13;
function XO(str) {
    var x = [];
    var o = [];
    for (var i = 0; i < str.length; i++) { // i must be lower than length
        // str[i] or str.charAt(i), not str(i)
        if (str[i].toLowerCase() === 'x') { // toLowerCase is function, it must be called with toLowerCase()
            x.push(str[i]); // should push character
        } else if (str[i].toLowerCase() === 'o') {
            o.push(str[i]);
        }
    }
    // return statement must be located at the end
    if (x.length == o.length) {
        return true;
    } else {
        return false;
    }
}
console.log(XO('xo'));
console.log(XO('xxo'));
console.log(XO('xoX'));
console.log(XO('xoOX'));
&#13;
&#13;
&#13;

答案 5 :(得分:0)

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
  }
}

答案 6 :(得分:0)

您可以使用正则表达式查找这些字符:

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