やりたい事
変数linesの配列に数字nが与えられているので、
以下の条件で全て一致する場合は、その数字をそのまま出力し、それ以外は「no」と出力して下さい。
条件:
変数linesの配列にはlines[0]にのみ値が入るものとする
lines[0]の配列に格納されてある値は『数字』で0〜9とする事
数字の数(数列)は変化するため、数が増えても減っても対応する事
var lines = ['数字nの値(0〜9)までのいずれかの数字が入っていて、かつ何列あるかはその都度変わります。)']
どのようなコードを書いたら期待通りの動作をしてくれるでしょうか?
ご回答よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/12/10 09:48 編集
2019/12/10 09:25
退会済みユーザー
2019/12/10 10:08 編集
2019/12/10 12:13 編集
退会済みユーザー
2019/12/10 14:01
2019/12/10 14:35 編集
退会済みユーザー
2019/12/10 18:19 編集
回答6件
0
文字列の法則を判定するには、正規表現を使います。
JavaScript 正規表現まとめ
今回の場合ですと、こんな感じになるんじゃないでしょうか?
正規表現:同じ文字の繰り返しをマッチする表現
JavaScript
1const line = new RegExp(/(\d)\1+/); 2let lines = ['1111','1212','2222']; 3 4lines.forEach( i=>{ 5 if( line.test(i) ) { 6 console.log(i); 7 } else { 8 console.log('no'); 9 } 10}); 11 12//'1111' 13//'no' 14//'2222'
訂正
今回の課題だと
const line = new RegExp(/(\d)\1+/);
ではなく、
const line = new RegExp(/^(\d)\1*$/);
が正しいそうです。
kasa0様、ご指摘ありがとうございますm(_ _)m
投稿2019/12/10 00:41
編集2019/12/10 01:01総合スコア975
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
こんにちは
引数の文字列str
が、単一の文字から構成されるかどうかを判定する関数 containsSingleChar(str)
を作るとすれば、一例として以下のように書けます。
javascript
1containsSingleChar = str => new Set(str).size === 1;
以下は、上記を使ったサンプルです。
- 動作確認用CodePen: https://codepen.io/jun68ykt/pen/LYEGMYx?editors=0012
参考になれば幸いです。
追記
containsSingleChar(str)
の別案です。ただし、引数が空文字列の場合、true
を返します。
javascript
1containsSingleChar = str => [...str].every(e => e === str[0]);
- 動作確認用CodePen: https://codepen.io/jun68ykt/pen/PowZXrv?editors=0012
投稿2019/12/10 01:00
編集2019/12/10 02:12総合スコア9058
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/10 04:43
退会済みユーザー
2019/12/10 09:07
2019/12/10 19:21
0
一つしかデータを持たない配列同士の比較であれば0番目要素を判定してください
javascript
1console.log([1111]===[1111]);//false 2console.log([1111][0]===[1111][0]);//true
細かいデータにわかれているなら文字列化してください
javascript
1var l1=[1,1,1,1]; 2var l2=[1,1,1,1]; 3var l3=[1,1,1,2]; 4console.log(l1===l2);//false 5console.log(l1===l3);//false 6console.log(JSON.stringify(l1)===JSON.stringify(l2));//true 7console.log(JSON.stringify(l1)===JSON.stringify(l3));//false
投稿2019/12/10 00:19
総合スコア116661
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/12/10 09:04
退会済みユーザー
2019/12/11 08:52
0
要件よくわかっていないけど、タイトルに対しての回答です。
2つ書いてみました。
lines の一文字目を取得して、連続文字列(数字)を作り、それと元の文字列(数字)を比較するってコンセプトです。
配列に格納されているn個の数字が、全て一致していたらok、一致していなかったらnoと出力したい
単純に1文字目を与えられた文字数分つなげて比較するバージョン
JavaScript
1var lines1 = ['1111']; 2// var lines1 = ['1112']; 3var new_lines = [Array(lines1[0].length + 1).join(lines1[0][0])]; 4console.log(lines1[0] === new_lines[0] ? 'ok' : 'no');
与えられた文字数分の 111... に、0 から 9 を掛けて 000... から 999... を作り比較するバージョン
JavaScriot
1var lines1 = ['1111']; 2// var lines1 = ['1112']; 3var flag = false; 4var base = Array(lines1[0].length + 1).join(1); 5for (let i = 0; i<=9; i++){ 6 if(+lines1[0] === base * i)flag = true; 7} 8console.log(flag ? 'ok' : 'no');
タイトルに従うとlines1[0].length + 1
の箇所はn
かなぁ。
投稿2019/12/10 10:19
編集2019/12/11 08:53退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/12/10 14:24
退会済みユーザー
2019/12/11 08:34
退会済みユーザー
2019/12/11 09:02 編集
0
ベストアンサー
全ての数字が同じ場合は、その数字をそのまま出力し、それ以外は「no」と出力して下さい。
と、
この場合は全ての数字が一致しているため、okと出力します。
は矛盾しています。
数字nの値や数は変化する
これだと、lines
の配列のサイズが変化するのか、配列のサイズは常に 1 で、数字と桁数だけが変化するのか不明です。
※質問内容に不備がある場合は、コメントよりお知らせ下さい。
なんて書く前に、自分で質問内容を見直してください。
とりあえず、全ての数字が同じ場合はその数字をそのまま出力する、かつ配列のサイズは常に 1 であると仮定して回答しておきます。
javascript
1var lines = ['1111']; 2console.log(~lines[0].split('').reduce((a,b)=>a==b?a:-1)?lines[0]:'no');
投稿2019/12/10 00:43
総合スコア999
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/12/10 10:09 編集
2019/12/10 09:43
退会済みユーザー
2019/12/10 09:45
2019/12/10 09:48
退会済みユーザー
2019/12/10 09:50
退会済みユーザー
2019/12/11 07:34 編集
2019/12/11 08:47
退会済みユーザー
2019/12/11 09:02
0
配列の中の数字をsplit()で分解されてますよね。
分解すると配列が得られるので、その配列の要素の数マイナス1のぶんループしてみるのはいかがでしょうか?
JavaScript
1var _flg = true; 2var _a = ['1111']; 3var _b = _a[0].split(''); 4 5for (var i=0; i<(_b.length - 1); i++) { 6 // 今現在の要素と、次の要素の値を比較する 7 if (_b[i] !== _b[i + 1]) { 8 _flg = false; 9 break; 10 } 11} 12 13console.log('result = ' + _flg);
投稿2019/12/10 00:08
総合スコア239
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/12/10 09:53
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。