我找到了这个家庭作业问题的解决方案,但我觉得这不是解决问题的最有效方法。对我应该探索的其他解决方案感兴趣。
问题: 编写一个名为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)
答案 0 :(得分:3)
使用.every()
的简单解决方案。
function allEqual(input) {
return input.split('').every(char => char === input[0]);
}
console.log(allEqual('aba')); // false
console.log(allEqual('aaa')); // true
&#13;
比较一半
function allEqual(input) {
let inputLen = input.length;
let halfLen = Number.parseInt(inputLen/2) || 1;
if (inputLen <= 1) {
return true;
} else if (inputLen % 2 === 0) {
return input.substring(0,halfLen) === input.substring(halfLen);
} else {
return input.substring(0, halfLen) === input.substring(halfLen, inputLen -1) && input[0] === input[inputLen - 1];
}
}
console.log(allEqual('aba')); // false
console.log(allEqual('aaa')); // true
console.log(allEqual('')); // true
&#13;
答案 1 :(得分:2)
一旦找到与第一个字符不匹配的字符,您可以立即返回false
。如果您完成整个循环,请返回true
,因为所有字符必须匹配。
function allEqual(string) {
for (var i = 1; i < string.length; i++) {
if (string[i] != string[0]) {
return false;
}
}
return true;
}
您也可以在i = 1
开始循环,因为第一个字符显然等于它自己,因此无需测试它。
答案 2 :(得分:1)
也可以用正则表达式完成
function allEqual(str) {
return /^(.)\1*$/.test(str);
}
虽然可能不那么有效。
答案 3 :(得分:1)
此ES6解决方案也适用于除第一个plane以外的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
&#13;
答案 4 :(得分:0)
没有理由构造结果字符串。只需浏览所有角色并将它们与第一个角色进行比较(正如您一直在做的那样)。如果您找到了不同的字符,则结果为false
。如果您已经查看了所有角色并且找不到另一个角色,则答案为true
(请注意,这包括空字符串和单个字符串的边缘情况):< / p>
function allEqual(string) {
for (var i = 1; i < string.length; i++) {
if (string[0] !== string[i]) {
return false;
}
}
return true;
}
答案 5 :(得分:0)
我参加聚会有点晚了,但是当我需要在一个项目上这样做时,我想出了另一种方法:
function allEqual(input) {
return input === '' || new Set(input).size === 1;
}
console.log(['', 'aaa', '11', '####', 'aba', '12', '##@%', null, undefined].map(item => ({
item,
allEqual: allEqual(item),
})));