2016-12-16 1 views
1

私はこの宿題に関する解決策を見つけましたが、問題を解決する最も効率的な方法を感じません。私が探索すべき他の解決策に興味があります。文字列内のすべての文字が等しいかどうかをチェックする関数javascript - 宿題警告

質問: 文字列内のすべての文字が同じ

例である場合はtrueを返しallEqualという名前の関数を書く:

あなたが「AAA」を渡す場合は、「ABAを渡すと、それは trueを返します「それは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) 
+1

downvotesとは何ですか?妥当な質問のように思えます – vlaz

+1

[コードのレビュー](http://codereview.stackexchange.com/help/on-topic)を依頼しているので、このトピックをオフトピックとして閉じることにしました。 – Quentin

+0

ありがとう@viaz - ここにいるすべての有益な人たちに感謝しています。いつも通常、すべての質問が一人か二人か、または子宮から出てきたように行動してコード作成の仕方を知っています。彼らのコメントを読むのはちょっとコミカルです。 – EKR

答えて

2

単純な解を使用して.every()を使用します。このES6溶液はまた、すなわち外部コードと、第一plane以外のUnicodeコードポイントを持つ文字列の動作半分

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

+1

'Array.every'を使うと、' var allEqual = str => str.split( '')。すべて(char => str [0] === char) 'あなたは上に行く必要はありません文字が一致しない場合の完全な文字列 – DavidDomain

+0

@DavidDomainあなたが正しいです。私は 'some()'を使うように切り替えました。同じ考え。 – Jecoms

+0

確かに、 'every'を使うと' false'を返すのに対し、 'some'は' true'を返すので、 'every'では戻り値を否定する必要はありません。とにかく+1。 ;) – DavidDomain

1

はあまりに

function allEqual(str) { 
    return /^(.)\1*$/.test(str); 
} 

おそらくそれほど効果的ではないが、正規表現で行うことができます。

0

結果文字列を作成する理由はありません。すべてのキャラクターを調べて、最初のキャラクターと比較してください。別の文字を見つけた場合は、結果はfalseです。

function allEqual(string) { 
    for (var i = 1; i < string.length; i++) { 
     if (string[0] !== string[i]) { 
      return false; 
     } 

    } 
    return true; 
} 
2

することができます:あなたはすべての文字の上に行ってきたと別のものを見つけていない場合は、答えは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であなたのループを開始することができますので、それをテストする必要はありません。

1

を比較

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

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

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

関連する問題