![](/img/trans.png)
[英]How to write a javascript function that checks if first and last characters in a string are equal
[英]Function that checks whether all characters in a string are equal javascript - Homework Warning
我找到了这个家庭作业问题的解决方案,但我不认为这是解决问题的最有效方法。 对我应该探索的其他解决方案感兴趣。
问题:编写一个名为 allEqual 的函数,如果字符串中的每个字符都相同,则返回 true
例子:
如果你通过“aaa”它应该返回true 如果你通过“aba”它应该返回false */
我的代码
var stringAE = "aba";
function allEqual(string) {
var stringAENew = "";
for (var i = 0; i < string.length; i++) {
if (string[0] === string[i]) {
stringAENew += string[i];
console.log(stringAENew)
}
}
return stringAENew === string;
}
allEqual(stringAE)
使用.every()
简单解决方案。
function allEqual(input) { return input.split('').every(char => char === input[0]); } console.log(allEqual('aba')); // false console.log(allEqual('aaa')); // true console.log(allEqual('')); // true
一旦找到与第一个字符不匹配的字符,您可以立即返回false
。 如果您通过整个循环,则返回true
因为所有字符都必须匹配。
function allEqual(string) {
for (var i = 1; i < string.length; i++) {
if (string[i] != string[0]) {
return false;
}
}
return true;
}
您也可以从i = 1
开始循环,因为第一个字符显然等于自身,因此无需对其进行测试。
也可以用正则表达式完成
function allEqual(str) {
return /^(.)\1*$/.test(str);
}
虽然可能没有那么有效。
此 ES6 解决方案也适用于在第一个平面以外的 Unicode 代码点的字符串,即 16 位范围之外的代码:
function allEqual(string) { return [...string].every( (x, _, a) => x === a[0]); } console.log(allEqual('aaaa')); // true console.log(allEqual('aaaba')); // false // Next one fails in solutions that don't support multi-plane unicode: console.log(allEqual('𝌆𝌆𝌆')); // true console.log(allEqual('')); // true
没有理由构造结果字符串。 只需检查所有字符并将它们与第一个字符进行比较(就像您一直在做的那样)。 如果您找到不同的字符,则结果为false
。 如果您已经浏览了所有字符并且没有找到不同的字符,那么答案是true
(请注意,这包括空字符串和单个字符串的边缘情况):
function allEqual(string) {
for (var i = 1; i < string.length; i++) {
if (string[0] !== string[i]) {
return false;
}
}
return true;
}
我参加聚会有点晚了,但由于我需要在一个项目上这样做,我想出了另一种方法:
function allEqual(input) { return input === '' || new Set(input).size === 1; } console.log(['', 'aaa', '11', '####', 'aba', '12', '##@%', null, undefined].map(item => ({ item, allEqual: allEqual(item), })));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.