質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

393閲覧

省略記法の内容について質問です。

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

1クリップ

投稿2023/04/23 17:53

編集2023/04/23 18:03

プログラミング初心者です。

https://teratail.com/questions/s0egx0j6oixanh

以前、他の質問者様が記載されていた内容について質問です。
省略記法が一部用いられており、このコードの部分の仕組みと内容が理解できずに困っています。
下記の「ここから~ここまで」の部分です。

82行目:追加ボタン(tuikaBtn)クリックで追加されたtableタグに、v1とv2の値を入れる
83行目:trの後に削除ボタンの追加
84行目:82、83行目をtbl(※77行目に定義)に入れる

という内容だと考えておりますが、82行目の記法がどんな構造なのかを理解できませんでした。
どんな内容を省略しているのかを教えていただきたいです。
よろしくお願いいたします。

以下、URL先のコード

HTML

1<!DOCTYPE html> 2<html> 3 <head> 4 <title>アカウント登録</title> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7</head> 8 <body> 9 <div class="base container"> 10 <div class="row"> 11 <h1>アカウント登録</h1> 12 </div> 13 <div class="row"> 14 <div class="card" id="card"> 15 <div class="card-block"> 16 <form id="form-area" class="form-inline" method="post"> 17 <div class="form-group"> 18 <div class="input-group"> 19 <input id="namae" name="namae" type="text" class="form-control" placeholder="名前"> 20 </div> 21 </div> 22 <div class="form-group"> 23 <div class="input-group"> 24 <input id="nickname" name="nickname" type="text" class="form-control" placeholder="ニックネーム"> 25 </div> 26 </div> 27 28 <div class="form-group"> 29 <input id="tuikaBtn" type="button" name="touroku" value="追加"> 30 </div> 31 32 </form> 33 <div id="tuikaMoto"> 34 35 </div> 36 <div id="result"></div> 37 </div> 38 </div> 39 </div> 40 </div> 41 </div> 42 <div id="overLay"> 43 </div> 44 45------javascript------ 46<script> 47 let tuikaTimes = 0; 48 let result = document.getElementById('result'); 49 tuikaBtn.addEventListener('click', function () { 50 let namae = document.getElementById("namae"); 51 let nickname = document.getElementById("nickname"); 52 53 if( namae.value===""||nickname.value==="") { 54 return false; 55 } 56 if(!window.confirm(namae.value + 'さん' + nickname.value + 'を登録します。よろしいですか?')) { 57 return false; 58 } 59 60 alert(namae.value + 'さん' + nickname.value + 'にて登録しました。'); 61 62 tuikaTimes++; 63 64 if(tuikaTimes >= 3) { 65 let hyoji = document.getElementById("tuikaBtn"); 66 hyoji.style.visibility="hidden"; 67 return false; 68 } 69 }); 70 71 window.addEventListener('DOMContentLoaded', ()=>{ 72 tuikaBtn.addEventListener('click',()=>{ 73 let tbl=result.querySelector('table'); 74 if(!tbl){ 75 tbl=document.createElement('table'); 76 result.appendChild(tbl); 77 } 78 const v1=namae.value; 79 const v2=nickname.value; 80//ここから~~~~~~~~ 81 if(v1 && v2){ 82 const tr=[v1,v2].reduce((x,y)=>(x.appendChild(Object.assign(document.createElement('td'),{textContent:y})),x),document.createElement('tr')); 83 tr.appendChild(Object.assign(document.createElement('input'),{type:'button',value:'削除',className:'del'})); 84 tbl.appendChild(tr); 85 namae.value=''; 86 nickname.value=''; 87 } 88//~~~~~~~~ここまで 89 }); 90 }); 91 92 document.addEventListener('click',e=>{ 93 if(e.target.matches('.del')){ 94 e.target.closest('tr').remove(); 95 } 96 }); 97 98 </script> 99 </body> 100</html>
ujimushi_sradjp🎉を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dameo

2023/04/23 20:39 編集

省略はされていません。 82~86行目までのインデントを整形し、使用しているAPIの説明をコメントにしただけのものです。 // https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce const tr = [v1, v2].reduce((x, y) => ( // https://developer.mozilla.org/ja/docs/Web/API/Node/appendChild x.appendChild( // https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/assign Object.assign( // https://developer.mozilla.org/ja/docs/Web/API/Document/createElement document.createElement('td'), { textContent: y }) ), x), document.createElement('tr') ); tr.appendChild( Object.assign( document.createElement('input'), { type: 'button', value: '削除', className: 'del' } ) ); tbl.appendChild(tr); namae.value = ''; nickname.value = ''; 82行目はストリーム処理でよく使用されるmap/reduce/filterで括られるAPIの1つを使用しています。for文でも書けるけど、ストリーム処理にすると、やや分かりにくくなるものの、ループ内の処理をより明確に分離できる形で記述できるため、よく使用されます。 何度も聞くほど難しいわけではないので、きちんと理解して使用してください。
退会済みユーザー

退会済みユーザー

2023/04/24 00:08 編集

質問、ありがとうございます! 私の質問の仕方が悪かったのですが、dameo様の質問内容で、ほぼ私の疑問は解消できました! for文の書き方しか思い浮かばず、82行目を参考にしようとしていました。 しかし、このようなコードの書き方があることを知らず、質問させていただいた次第です。 添付してくださったリンクを元に、アロー関数も含め、処理方法を理解していこうと思います! 詳しく教えていただいて、ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問