発生している問題、目指している形
初心者なためかなり冗長なコードになっていると思いますがご了承ください。
ソースコードの様なtxtを読み込むと以下の様な配列になるプログラムを作ったのですが、各配列内でx,yを分けて数字を足したいです。
result5[a]=[[x, 1000, a], [y, 1000, a], [y, 1, a], [x, 1000, a]]
result5[b]=[[x, 100, b], [x, 10, b], [x, 100, b]]
result5[c]=[[y, 100, c], [y, 10, c], [x, 1, c]]
result5[d]=[[x, 1, d], [x, 10, d]]
最終的には配列内のa,b,c,dは消し、以下の様な形にしたいです。
result5[a]=[[x, 2000], [y, 1001]]
result5[b]=[x, 210]
result5[c]=[[x, 1], [y, 110]]
result5[d]=[x, 11]
result5[k]のkの値が同じ時に何度も数字を足してしまったり、xとyを分けて数字を足すことができませんでした。
どうかご教授お願いします。
該当のソースコード
JavaScript
1<body> 2<form name="test"> 3<input type="file" id="selfile"><br> 4<textarea name="txt" rows="10" cols="60" readonly></textarea> 5</form> 6 7<script> 8 9var obj1 = document.getElementById("selfile"); 10 11obj1.addEventListener("change",function(evt){ 12 13 var file = evt.target.files; 14 var reader = new FileReader(); 15 reader.readAsText(file[0]); 16 17 reader.onload = function(ev){ 18 19 //テキストエリアに表示 20 document.test.txt.value = reader.result.toLowerCase(); 21 var result2=reader.result.toLowerCase().split("\n"); 22 23 var result3=[]; 24 for (var i = 0; i <result2.length; i++) { 25 result3.push(result2[i].split(/\s+/)); 26 } 27 28 for (var i = 0; i<result3.length; i++) { 29 if(result3[i].length>=6){ 30 while (result3[i].length>=6){ 31 result3[i].pop(); 32 } 33 } 34 } 35 36 Array.prototype.divide = function(n){ 37 var ary = this; 38 var idx = 0; 39 var results = []; 40 var length = ary.length; 41 42 while (idx + n < length){ 43 var result = ary.slice(idx,idx+n) 44 results.push(result); 45 idx = idx + n 46 } 47 var rest = ary.slice(idx,length+1) 48 results.push(rest) 49 return results; 50 } 51 52 result4=[]; 53 for (var i = 0; i<result3.length; i++) { 54 result4.push(result3[i].divide(1)); 55 } 56 57 for (var i = 0; i<result4.length; i++) { 58 if(result4[i][4][0].indexOf("x") >= 0){ 59 result4[i][0].unshift(1000); 60 result4[i][0].unshift("x"); 61 result4[i][1].unshift(100); 62 result4[i][1].unshift("x"); 63 result4[i][2].unshift(10); 64 result4[i][2].unshift("x"); 65 result4[i][3].unshift(1); 66 result4[i][3].unshift("x"); 67 } else if (result4[i][4][0].indexOf("y") >= 0){ 68 result4[i][0].unshift(1000); 69 result4[i][0].unshift("y"); 70 result4[i][1].unshift(100); 71 result4[i][1].unshift("y"); 72 result4[i][2].unshift(10); 73 result4[i][2].unshift("y"); 74 result4[i][3].unshift(1); 75 result4[i][3].unshift("y"); 76 } 77 } 78console.log(result4); 79 80var result5 = []; 81for (var i = 0; i < result4.length; i++) { 82 for (var j = 0; j < result4[i].length; j++) { 83 k = result4[i][j][2]; 84 if (!result5[k]) { 85 result5[k] = []; 86 } 87 result5[k].push(result4[i][j]); 88 } 89} 90console.log(result5); 91 } 92},false); 93</script> 94</body>
txt
1a b b d X 2a c c a Y 3a b d c X
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/09 23:03