[英]How to check existence and amount of certain characters within a string (e.g. 'x'/'X' and 'o'/'O')?
我参加了代码大战(基础知识),有一个套路要求我制作一个程序,让您查看'x'
和'o'
数量是否相同(例如'xXXooO'
应该返回true
和'xXxxO'
应该返回false
)。
使用我对编码的最佳知识(一点点)我构建了这段代码,但它不起作用。
function XO(str) {
let string = str;
const o = string.match(/O/g) + string.match(/o/g);
const x = string.match(/X/g) + string.match(/x/g);
if (o.length != x.length) {
return true;
} else {
return false;
}
}
请告诉我我的代码有什么问题。
这部分是我更新后的。
我更新了我的代码,但它说 null 不是 object。我也更新了变量,但我认为这不是原因。
function XO(str) {
let string = str;
const largeO = string.match(/O/g);
const smallO = string.match(/o/g);
const largeX = string.match(/X/g);
const smallX = string.match(/x/g);
const oCombined = largeO.length + smallO.length;
const xCombined = largeX.length + smallX.length;
if (oCombined = xCombined) {
return true;
} else {
return false;
}
}
console.log(XO("OxX"));
对于'x'
/ 'X'
和'o'
/ 'O'
不区分大小写的匹配,需要使用正则表达式i
修饰符(或标志)。
并且需要处理失败match
方法的null
返回值,下一个提供的示例代码由可选链接 / ?.
和Nullish 合并运算符 / ??
.
function isXAndOWithSameAmount(value) { // always assure a string type value = String(value); // in case of a `null` value... ...count is -1. const xCount = value.match(/x/gi)?.length?? -1; // in case of a `null` value... ...count is -2. const oCount = value.match(/o/gi)?.length?? -2; // thus the return value for neither an 'x'/`X` // match nor an 'o'/`O` match will always be `false`. return (xCount === oCount); // in order to achieve another (wanted/requested) // behavior one needs to change both values after // the nullish coalescing operator accordingly. } console.log( "isXAndOWithSameAmount('xXXooO')..?", isXAndOWithSameAmount('xXXooO') ); console.log( "isXAndOWithSameAmount('xXoXooOx')..?", isXAndOWithSameAmount('xXoXooOx') ); console.log( "isXAndOWithSameAmount('xXxxO')..?", isXAndOWithSameAmount('xXxxO') ); console.log( "isXAndOWithSameAmount('xOoXxxO')..?", isXAndOWithSameAmount('xOoXxxO') ); console.log( "isXAndOWithSameAmount('')..?", isXAndOWithSameAmount('') ); console.log( "isXAndOWithSameAmount('bar')..?", isXAndOWithSameAmount('bar') );
.as-console-wrapper { min-height: 100%;important: top; 0; }
其中一个原因可以通过将match
结果和可选链接的?.length
通过parseInt
转换为 integer 值来实现相同的行为,这将返回一个大于零的(整数)数值或NaN
值。
function isXAndOWithSameAmount(value) { // always assure a string type value = String(value); // making use of optional chaining and `parseInt` // which will result in (integer) number values // grater than zero or the `NaN` value. const xCount = parseInt(value.match(/x/gi)?.length); const oCount = parseInt(value.match(/o/gi)?.length); // since a `NaN` value is not equal to itself // the return value for neither an 'x'/`X` match // nor an 'o'/`O` match will always be `false`. return (xCount === oCount); } console.log( "isXAndOWithSameAmount('xXXooO')..?", isXAndOWithSameAmount('xXXooO') ); console.log( "isXAndOWithSameAmount('xXoXooOx')..?", isXAndOWithSameAmount('xXoXooOx') ); console.log( "isXAndOWithSameAmount('xXxxO')..?", isXAndOWithSameAmount('xXxxO') ); console.log( "isXAndOWithSameAmount('xOoXxxO')..?", isXAndOWithSameAmount('xOoXxxO') ); console.log( "isXAndOWithSameAmount('')..?", isXAndOWithSameAmount('') ); console.log( "isXAndOWithSameAmount('bar')..?", isXAndOWithSameAmount('bar') );
.as-console-wrapper { min-height: 100%;important: top; 0; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.