如何在Javascript中将值从1维数组推送到2维数组?

时间:2017-12-02 01:25:57

标签: javascript arrays multidimensional-array binary translation

这是我在这个论坛上的第一个问题。我是新手程序员。目前,我正在开发一个应用程序,它返回传递的二进制字符串的英文翻译句子。这是我的代码:

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循环中,我遍历了&#39; matrix&#39;数组找到值1.当我找到它时,我正在从二进制数字中推出适当的值。阵列。我卡在一个地方。

函数返回一个数组&#39; res&#39;完全有价值观:

[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]

问题是我不知道如何在&#39; res&#39;中总结适当的值。阵列。 我会得到类似的回报:

[[64, 1], [64, 32, 16, 2], [64, 32, 4, 1], [64, 32, 8, 4, 2] etc ..]

然后我将能够在特定数组中对值进行求和,然后使用fromCharCode()我将返回一个英语句子。

任何人都知道如何获得上面的数组?或者以另一种方式求和适当的值?

2 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您应该能够在第二个循环中使用类似的技术。在开始内部循环之前,只需将一个新数组推入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)

答案 1 :(得分:0)

这是一个现成的应用程序:

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!