我希望每个人都过得愉快。
这是我在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;
}
}
}
答案 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)
我纠正了错误并使用代码注释来解释
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;
答案 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;
}