for循环和数组有问题

时间:2018-08-14 19:52:09

标签: javascript arrays for-loop binary

(我知道有一种更简单的方法可以转换为二进制文件,但是在我快完成此工作之前我不知道。所以我只是想尝试完成它。我对此进行了编码只是为了学习):) 我正在尝试创建一个将二进制转换为ASCII代码的函数。这是我从二进制转换为数字的方式:

function fromBinaryToNumber(num) {
  let numbers = num.split('') //turns the binary into an array
  let firstIndexWith1;
  let numbersToAdd = [];
  let result;

  //Delete 0's at start of array
  for (i = 0; i < numbers.length; i++) {
    numbers[i] = parseInt(numbers[i], 10);
  }
  firstIndexWith1 = numbers.indexOf(1);
  numbers.splice(0, firstIndexWith1);

  //Convert
  let checkAgainstThese = [128, 64, 32, 16, 8, 4, 2, 1];
  checkAgainstThese = checkAgainstThese.slice(checkAgainstThese.length - numbers.length, checkAgainstThese.length);

  //put numbers to add in array
  for (i = 0; i < numbers.length; i++) {
    if (numbers[i] === 1) {
      numbersToAdd.push(checkAgainstThese[i]);
    }
  }

  //add numbers
  result = numbersToAdd.reduce((a, b) => a + b, 0);
  return result;
}

有效。但是我希望能够一次转换多个字节。这就是我要这样做的方式:

function fromBinaryToASCII(sentence) {
  let convertThis = sentence.split(' ');
  let result = [];
  for (i = 0; i < convertThis.length; i++) {
    result.push(fromBinaryToNumber(convertThis[i]));
  }
  return result;
}

我已经制作了一个函数,可以成功地将句子从二进制转换为二进制,并且出于某种原因,一个函数可以工作,但即使这个看上去很相似,也不能运行。

因此,我试图找出问题所在,然后尝试将console.log放入for循环中并打印出i。像这样:

for (i = 0; i < convertThis.length; i++) {
  result.push(fromBinaryToNumber(convertThis[i]));
  console.log(i);
}

由于某种原因,它仅输出数字6。当我删除result.push代码时,它会正确输出。我很困扰。有人能帮我吗? -谢谢

(对不起,标题不好,或者我解释不好)

1 个答案:

答案 0 :(得分:0)

for(i=0; i<convertThis.length; i++) {  <-- global i

for(i=0; i<numbers.length; i++) {  <-- global i

一个运行时,它将更改另一个的编号。...这就是var不是可选的原因。因此,请使用let或var

for(let i=0; i<convertThis.length; i++) { 

for(let i=0; i<numbers.length; i++) {