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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

0回答

258閲覧

配列の中身をabc順に表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2017/10/26 08:59

編集2017/10/26 10:48

以下の出力(メインコードの112行目)をabc順にwebページでも表示したいです.herokuの更新の都合?によって,更新が入るたびに順番が変わってしまい困っています.常に,abc順で固定されるようにしたいです.
ターミナルとコンソール上ではabc順にソートできている状態です.

javascript

1$('<div><input readonly type="text" value='+key+' /></div>').appendTo("#group"+key); //ユーザID

例えば,ユーザが3人いてtanaka,satou,uedaがログインするとweb上でsatou,tanaka,uedaと表示されるようにしたいということです.
ユーザIDはkeys配列に入っていて,それぞれユーザIDはkeyとなっています.

わかりにくい説明ですみません.

↓メインコード

javascript

1navigator.getUserMedia=navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia; 2window.AudioContext = window.AudioContext || window.webkitAudioContext; 3 4var keymicnodepair=new Object(); 5var keygainpair=new Object(); 6var beforevalue=new Object(); 7var keyoutputpair=new Object(); 8 9navigator.getUserMedia({ audio: true}, function (stream) { 10 11 var context = new AudioContext(); 12 var peer; 13 var socket = io();//元のやつ 14 var id; 15 var output = context.createMediaStreamDestination();//ダミー用 16 17 socket.on('connect', function () { 18 var options = { 19 host: location.hostname, 20 port: location.port, 21 path: '/api', // app.use('/api', peerServer);と同じ位置になるように 22 }; 23 id = localStorage.getItem('user_id'); 24 peer = new Peer(id, options); 25 //peer = new Peer(socket.id, options); 26 peer.on('call', function (call) { 27 console.log('%sにcallされました', call.peer); 28 for(var i in keygainpair){ 29 console.log("call key="+i+" gain="+keygainpair[i].gain.value); 30 } 31 call.answer(keyoutputpair[call.peer].stream); 32 }); 33 $(function(){ 34 setInterval(function(){ 35 console.log("calldammy!"); 36 peer2 = new Peer("dammy", options); 37 peer2.on('call', function (call) { 38 console.log('%sにcallされました', call.peer); 39 call.answer(output.stream); 40 }); 41 },25000); 42 }); 43 }); 44 45 //受信した全てのP2Pkeyをaudio要素に変換する 46 socket.on('keys', function (keys) { 47 48 for(var i in keymicnodepair){//ソース削除 49 console.log("key="+i+" gain="+keygainpair[i].gain.value); 50 keygainpair[i].disconnect(); 51 keymicnodepair[i].disconnect(); 52 delete keymicnodepair[i]; 53 delete keygainpair[i]; 54 //不具合出たらdelete keyoutputpair[i];をまず検討 55 } 56 57 $("#audios").empty(); 58 $("#sliderarea").empty(); 59 60 var audios = document.querySelector('#audios'); 61 audios.innerHTML = ''; 62 63 console.log("keys",keys); //abc順に表示されるようになった171024 64 console.log("socket.id",id); 65 66 var index = keys.indexOf(id); 67 if (index > -1) { 68 keys.splice(index, 1);// 自分自身を無視 69 } 70 71 arrayforkeys=keys;//キー押下時の繰り返し処理のため 多分いらない 72 73 keys.forEach(function (key) { 74 keymicnodepair[key]=context.createMediaStreamSource(stream);//sourcenode 75 if(context.createGain) { 76 keygainpair[key] = context.createGain(); 77 } 78 else { 79 // 多分不要だと思われますが、念のため古いWeb Audio APIへの対処 80 keygainpair[key] = context.createGainNode(); 81 } 82 keyoutputpair[key]=context.createMediaStreamDestination(); 83 keymicnodepair[key].connect(keygainpair[key]); 84 keygainpair[key].connect(keyoutputpair[key]); 85 86 var call = peer.call(key, keyoutputpair[key].stream); 87 if (call === undefined) { 88 console.log(key + 'なんて居ません'); 89 return; 90 } 91 call.on('stream', function (remoteStream) { 92 93 $(function(){ 94 setInterval(function(){ 95 console.log("senddammy!"); 96 socket.emit('dammy', "dammy"); 97 },25000); 98 }); 99 100 var audio = new Audio(); 101 audio.src = URL.createObjectURL(remoteStream); 102 audio.controls = false; 103 audio.play(); 104 audios.appendChild(audio); 105 106 //171024 107 var ary=[keys]; 108 ary.sort(); 109 // document.write(ary); 110 111 $('<div id=group'+key+'><div>').appendTo("#sliderarea"); 112 $('<div><input readonly type="text" value='+key+' /></div>').appendTo("#group"+key); //ユーザID 113 console.log(key); 114 $('<div id="num'+key+'"><input id="input'+key+'" readonly type="text" size="3"/></div>').appendTo("#group"+key); //数値 115 $('<div id="slider'+key+'" style="height:300px"/></div>').appendTo("#group"+key); //スライダー 116 117 $(function() { 118 //スライダーを適用 119 $('#slider'+key).slider({ 120 orientation: 'vertical', 121 min: 0, 122 max: 200, 123 step: 1, 124 value: 100, 125 //スライダーの変化時にテキストボックスの値表示を更新 126 change: function(e, ui) { 127 $('#input'+key).val(ui.value); 128 console.log("change!!!"+key+" "+ui.value); 129 console.log("change before: "+keygainpair[key].gain.value); 130 keygainpair[key].gain.value=1;//0.5; 131 //keygainpair[key].gain.value = ui.value/200;//デバッグ用 132 console.log("change after: "+keygainpair[key].gain.value); 133 134 //beforevalueの値更新 135 try{ 136 if(key in beforevalue){ 137 beforevalue[key]=ui.value/100; 138 for (var keyString in beforevalue) { 139 console.log("key="+keyString+" value="+beforevalue[keyString]); 140 } 141 } 142 }catch(e){ 143 alert("key is not found"); 144 } 145 for(var i in keygainpair){ 146 console.log("change key="+i+" gain="+keygainpair[i].gain.value); 147 } 148 }, 149 150 //スライド中に変化を取得 151 slide:function(e, ui){ 152 $('#input'+key).val(ui.value); 153 }, 154 155 //スライダーの初期化時に、その値をテキストボックスにも反映 156 create: function(e, ui) { 157 try{ 158 if(key in beforevalue){ 159 console.log("value is updated"); 160 keygainpair[key].gain.value=1;//0.5; 161 for (var keyString in beforevalue) { 162 console.log("key="+keyString+" value="+beforevalue[keyString]); 163 } 164 console.log(""); 165 $('#input'+key).val(beforevalue[key])*100; 166 $("#slider"+key).slider("value",beforevalue[key]*100); 167 ui.value=beforevalue[key]*100; 168 console.log("create before: "+keygainpair[key].gain.value); 169 console.log("create after: "+keygainpair[key].gain.value); 170 } 171 else{ 172 //音量値初期値記憶 173 keygainpair[key].gain.value=1;//0.5; 174 beforevalue[key]=1;//0.5; 175 $('#input'+key).val('100'); 176 console.log("初期化!"); 177 console.log( $('#input'+key).val()); 178 for (var keyString in beforevalue) { 179 console.log("key="+keyString+" value="+beforevalue[keyString]); 180 } 181 } 182 }catch(e){} 183 } 184 }); 185 }); 186 }); 187 }); 188 }); 189 190}, function (error) { 191 alert('Failed to get local stream', error); 192}); 193 194//キーダウン処理 195var flag=true; 196 document.onkeydown = function (evt){ 197 if (!evt) e = window.event; 198 if(flag){ 199 console.log("キーが押された"); 200 document.getElementById("running").classList.add("pressing"); 201 for(var key in keygainpair){ 202 console.log("keydown before: "+keygainpair[key].gain.value); 203 keygainpair[key].gain.value=beforevalue[key]; 204 console.log("keydown after: "+keygainpair[key].gain.value); 205 } 206 } 207 flag=false; 208 } 209 210 //キーアップ処理 211 document.onkeyup=function (evt){ 212 if (!evt) e = window.event; 213 console.log("キーが離された"); 214 document.getElementById("running").classList.remove("pressing"); 215 flag=true; 216 for(var key in keygainpair){ 217 console.log("keyup before: "+keygainpair[key].gain.value); 218 keygainpair[key].gain.value=1;//0.5; 219 console.log("keyup after: "+keygainpair[key].gain.value); 220 } 221 } 222 223//自分の音を返す処理 224navigator.getMedia2 = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; 225navigator.getMedia2({ audio:true }, function(stream) { 226var context = new AudioContext(); 227var source = context.createMediaStreamSource(stream); 228if(context.createGain) { 229 var micGain2 = context.createGain(); 230} 231else { 232 //多分不要だと思われますが、念のため古いWeb Audio APIへの対処 233 micGain2 = context.createGainNode(); 234} 235source.connect(micGain2); 236micGain2.gain.value =1.0; //自分の音量調整 237 238micGain2.connect(context.destination); 239}, function(err){ //エラー処理 240});

↓サーバコード

javascript

1// Dependencies 2const express = require('express'); 3const createHttpServer = require('http').createServer; 4const createIo = require('socket.io'); 5const createPeerServer = require('peer').ExpressPeerServer; 6 7// Environment 8const port = process.env.PORT || 5650; 9 10// Routes 11const app = express(); 12const httpServer = createHttpServer(app); 13const io = createIo(httpServer); 14const peerServer = createPeerServer(httpServer); 15 16app.use('/api', peerServer); 17app.use(express.static(__dirname)); 18 19// Boot 20httpServer.listen(port, () => { 21 console.log(`Boot on http://localhost:${port}`); 22}); 23 24// Manage p2p keys 25const keys = []; 26 27peerServer.on('connection', (key) => { 28 if(key!="dammy") keys.push(key); 29 keys.sort(); //追加171024 30 console.log('connected', keys); 31 32 io.emit('keys', keys);// 接続中の全てのクライアントへ`keys`イベントを発行 33}); 34peerServer.on('disconnect', (key) => { 35 const index = keys.indexOf(key); 36 if (index > -1) { 37 keys.splice(index, 1); 38 } 39 console.log('disconnect', keys); 40 41 io.emit('keys', keys);// 同上 42}); 43 44//---------------------------// 45io.on('connection',function(socket) { 46 socket.on("dammy",function(data){ 47 console.log(data); 48 });

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

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

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

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

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

maisumakun

2017/10/26 10:44

「ueda,satou,tanaka」はアルファベット順でも逆順でもなさそうですが、単なる間違いでしょうか。
退会済みユーザー

退会済みユーザー

2017/10/26 10:47

すみません,間違いです.頭文字のabc順にしたいのでsatou,tanaka,uedaです.修正します.ご指摘ありがとうございます!
masaya_ohashi

2017/10/30 02:04

112行目の下でconsole.log(key)としている出力はabc順になっていますか?
退会済みユーザー

退会済みユーザー

2017/10/31 13:15

keyには一つずつ割り当てられているので,satou,tanaka...と別々に一行ずつ出力されています.63行目のconsole.log("keys", keys)ではsatou,tanaka,uedaと出力されます.keysの中身をsortしているので,keysの中のkeyはabc順になっています
masaya_ohashi

2017/11/01 00:06

#sliderareaの中に#groupsatou、#grouptanaka、#groupuedaという順で出てこない、という問題なんですよね?
退会済みユーザー

退会済みユーザー

2017/11/01 04:56

そういうことです!
masaya_ohashi

2017/11/01 05:09 編集

$('<div><input readonly type="text" value='+key+' /></div>').appendTo("#group"+key);の次の行のconsole.log(key);ではABC順で出てるんですよね?なのに#slideareaの中には実際にはABC順でない#groupXXXが入っている、ということですよね?
退会済みユーザー

退会済みユーザー

2017/11/02 07:32

すみません,ご指摘の$('<div><input readonly type="text" value='+key+' /></div>').appendTo("#group"+key);の次の行のconsole.log(key);では一つのkeyしか出ていません..//スライド中に変化を取得の上のconsole.log("change key="+i+" gain="+keygainpair[i].gain.value);では,abc順でkeyとgainの情報が一行ずつ出ています.恐らくこちらのconsole.logと間違えて前回コメントしてしまいました.
masaya_ohashi

2017/11/02 07:36

1つのkeyしか出てないのは承知のうえで、それが3回「ABC順」で出るかを確認したいのです。console.log(key);ではなく、console.log("appendTo:" + key);と出力を変えてテストして、appendTo:satou、appendTo:tanaka、appendTo:uedaと3回に分けて出力されているかを確認してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問