return 将十进制数转换为二进制数的函数中的语句

return statement in function that convert decimal to binary numbers

我正在尝试了解如何在 JS 中使用函数。

此代码将十进制数转换为二进制数:

for (j = 13; j <= 16; j++) {
  res = ""
  number = j

  while (number > 0) {
    res = res + number % 2
    number = Math.floor(number / 2)
  }

  len = res.length

  rev=""

  for (i = 1; i <= len; i++) {
    rev = rev + res[res.length - i]
  }
  
  console.log(rev)
}

但是当我试图将这段代码放入一个函数时,函数 returns 只有第一个或最后一个值。我做错了什么?

function f(min, max) {
  for (j = min; j <= max; j++) {
    res = ""
    number = j
    
    while (number > 0) {
      res = res + number % 2
      number = Math.floor(number / 2)
    }

    len = res.length

    rev=""

    for (i = 1; i <= len; i++) {
      rev = rev + res[res.length-i]     
    }  
  }
  return rev
}

console.log(f(13,15))

您必须将每次迭代的结果存储在数组中。

function f(min, max) {
  const results = []
  for (j = min; j <= max; j++) {
    res = ""
    number = j
    
    while (number > 0) {
      res = res + number % 2
      number = Math.floor(number / 2)
    }

    len = res.length

    rev=""

    for (i = 1; i <= len; i++) {
      rev = rev + res[res.length-i]     
    }
    
    results.push(rev)
  }
  return results
}

console.log(f(13,15))

您还应该在 JavaScript 中声明您的变量,因为不这样做会导致错误 https://www.geeksforgeeks.org/what-happen-when-we-directly-assign-the-variable-without-declaring-it-in-javascript/

您需要一个变量来收集所有中间结果。

您可以对所有变量进行声明。

function f(min, max) {
    const result = [];
    for (let j = min; j <= max; j++) {
        let number = j,
            temp = "";
        while (number > 0) {
            temp += number % 2;
            number = Math.floor(number / 2);
        }
        result.push(temp);
    }
    return result;
}

console.log(f(13, 15));

您应该将代码分成函数

一个将数字转换为二进制字符串的(我也包括现有的js版本)

还有一个创建最小值和最大值之间的元素列表并迭代它们的方法

const toBin = n => n.toString(2)

const customToBin = n => {
  const res = []
  let number = n
  while (number > 0) {
    res.push(number % 2)
    number = Math.floor(number / 2)
  }
  return res.reverse().join('')
}

const createInterval = (min, max) => Array(max - min + 1).fill(min).map((_, i) => min + i)

const f = (min, max) => createInterval(min, max).map(customToBin)


console.log(f(13, 16))