检查字符串中的所有字符是否相等的函数javascript - 家庭作业警告

时间:2016-12-16 21:44:58

标签: javascript string

我找到了这个家庭作业问题的解决方案,但我觉得这不是解决问题的最有效方法。对我应该探索的其他解决方案感兴趣。

问题: 编写一个名为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) 

6 个答案:

答案 0 :(得分:3)

使用.every()的简单解决方案。

&#13;
&#13;
function allEqual(input) {
    return input.split('').every(char => char === input[0]);
}

console.log(allEqual('aba')); // false
console.log(allEqual('aaa')); // true
&#13;
&#13;
&#13;

比较一半

&#13;
&#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;
&#13;
&#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位范围:

&#13;
&#13;
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;
&#13;
&#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),
})));