[英]How to push values from 1 dimensional array to 2 dimensional array in Javascript?
這是我在這個論壇上的第一個問題。 我是新手程序員。 目前,我正在開發一個應用程序,該應用程序返回傳遞的二進制字符串的英語翻譯句子。 這是我的代碼:
function binaryAgent(str) {
var binArr = str.split('');
var res = [];
var binary = [128, 64, 32, 16, 8 , 4, 2, 1];
var k = -1;
var matrix = [];
var noSpace = str.replace(/\s+/g, '');
for(var m=0; m<noSpace.length; m++){
if(m % 8 === 0){
k++;
matrix[k] = [];
}
matrix[k].push(noSpace[m]);
}
for(var i=0; i<matrix.length; i++){
for(var j=0; j<matrix[i].length; j++){
if(matrix[i][j] == 1){
res.push(binary[j]);
}
}
}
return res;
}
binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000
01100010 01101111 01101110 01100110 01101001 01110010 01100101
01110011 00100000 01100110 01110101 01101110 00100001 00111111");
在第二個for循環中,我遍歷“矩陣”數組以找到值1。找到它時,我從“二進制”數組中推入了適當的值。 我被困在一個地方。
函數返回一個數組“ res”,其值總計為:
[64, 1, 64, 32, 16, 2, 64, 32, 4, 1, 64, 32, 8, 4, 2, 32, 4, 2, 1, 64, 32, 16, 4, 32, 64, 32, 2, 64, 32, 8, 4, 2, 1, 64, 32, 8, 4, 2, 64, 32, 4, 2, 64, 32, 8, 1, 64, 32, 16, 2, 64, 32, 4, 1, 64, 32, 16, 2, 1, 32, 64, 32, 4, 2, 64, 32, 16, 4, 1, 64, 32, 8, 4, 2, 32, 1, 32, 16, 8, 4, 2, 1]
問題是我不知道如何對'res'數組中的適當值求和。 我會得到這樣的回報:
[[64, 1], [64, 32, 16, 2], [64, 32, 4, 1], [64, 32, 8, 4, 2] etc ..]
然后,我將能夠對特定數組中的值求和,然后使用fromCharCode()返回英文句子。
任何人都知道如何獲取上面的數組嗎? 還是以其他方式求和適當的值?
如果我正確理解了您的問題,則應該可以在第二個循環中使用類似的技術。 只需在開始內部循環之前將一個新數組推送到res
,然后在內部循環中將值推送到該數組中即可:
function binaryAgent(str) { var binArr = str.split(''); var res = []; var binary = [128, 64, 32, 16, 8 , 4, 2, 1]; var k = -1; var matrix = []; var noSpace = str.replace(/\\s+/g, ''); for(var m=0; m<noSpace.length; m++){ if(m % 8 === 0){ k++; matrix[k] = []; } matrix[k].push(noSpace[m]); } for(var i=0; i<matrix.length; i++){ res[i] = [] for(var j=0; j<matrix[i].length; j++){ if(matrix[i][j] == 1){ res[i].push(binary[j]); } } } return res; } var ar = binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111"); console.log(ar)
您沒有問,但順便說一句,如果您想使代碼更簡潔,也可以擺脫一些循環:
function binaryAgent(str) { var binary = [128, 64, 32, 16, 8 , 4, 2, 1]; var k = -1; var matrix = str.split(/\\s+/).map(i => Array.from(i)) return matrix.map(a => a.reduce((a, c, i) => { if(c == 1) { a.push(binary[i]) } return a }, [])) } var ar = binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111"); console.log(ar)
這是一個現成的應用程序:
function binaryAgent(str) {
var binArr = str.split('');
var res = [];
var binary = [128, 64, 32, 16, 8 , 4, 2, 1];
var k = -1;
var matrix = [];
var noSpace = str.replace(/\s+/g, '');
var sum = [], res2 = [], result = [];
for(var m=0; m<noSpace.length; m++){
if(m % 8 === 0){
k++;
matrix[k] = [];
}
matrix[k].push(noSpace[m]);
}
for(var i=0; i<matrix.length; i++){
res[i] = [];
for(var j=0; j<matrix[i].length; j++){
if(matrix[i][j] == 1){
res[i].push(binary[j]);
}
}
}
function getSum(total, num){
return total + num;
}
for(var x=0; x<res.length; x++){
for(var y=0; y<res[x].length; y++){
sum[x] = res[x].reduce(getSum);
}
}
for(var z=0; z<sum.length; z++){
res2[z] = String.fromCharCode(sum[z]);
}
result = res2.join('');
return result;
}
binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111");
我知道代碼不是最高質量,但是今天我學到了很多東西。 再次感謝Mark_M!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.