如何在 Javascript 中将值从一维数组推送到二维数组?
How to push values from 1 dimensional array to 2 dimensional array in Javascript?
这是我在这个论坛上的第一个问题。我是一个新手程序员。目前,我正在开发一个应用程序,其中 returns 是传递的二进制字符串的英文翻译句子。这是我的代码:
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 循环中,我遍历 'matrix' 数组以找到 1 的值。当我找到它时,我从 'binary' 数组中推送适当的值。我卡在了一个地方。
函数return是一个数组'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' 数组中的适当值求和。
我会得到一个 return 类似的东西:
[[64, 1], [64, 32, 16, 2], [64, 32, 4, 1], [64, 32, 8, 4, 2] etc ..]
然后我将能够对特定数组中的值求和,然后使用 fromCharCode() 我将 return 一个英文句子。
有人知道如何得到上面的数组吗?或者以另一种方式求和适当的值?
如果我正确理解你的问题,你应该能够在你的第二个循环中使用类似的技术。只需在开始内部循环之前将一个新数组推入 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!
这是我在这个论坛上的第一个问题。我是一个新手程序员。目前,我正在开发一个应用程序,其中 returns 是传递的二进制字符串的英文翻译句子。这是我的代码:
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 循环中,我遍历 'matrix' 数组以找到 1 的值。当我找到它时,我从 'binary' 数组中推送适当的值。我卡在了一个地方。
函数return是一个数组'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' 数组中的适当值求和。 我会得到一个 return 类似的东西:
[[64, 1], [64, 32, 16, 2], [64, 32, 4, 1], [64, 32, 8, 4, 2] etc ..]
然后我将能够对特定数组中的值求和,然后使用 fromCharCode() 我将 return 一个英文句子。
有人知道如何得到上面的数组吗?或者以另一种方式求和适当的值?
如果我正确理解你的问题,你应该能够在你的第二个循环中使用类似的技术。只需在开始内部循环之前将一个新数组推入 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!