有一些JavaScript问题,for loop.将数字转换为其字符串值

having some javascript trouble, for loop. turning a number into its string value

本文关键字:转换 数字 字符串 loop JavaScript 问题 for      更新时间:2023-09-26

我正在寻找一个程序,它将一个实数组合成一个字符串,无论长度如何。 出于这些目的,1234 可以变成"一"二"三"四"或"一二三四"或 w/e。我试图通过遍历实数然后遍历数组来做到这一点。 我在节点中的输出未通过如下所示的控制台.log()定义。不太确定该怎么做,因为我是新手,非常感谢任何帮助。

var datArray = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
var toEnglish = function (number) {
    for ( var i = 0; i <= number.length; i++ ) {
        var newNumber = datArray[number[i]];
        newNumber = newNumber + newNumber;
    }
    console.log(newNumber);
    return newNumber;
}
toEnglish(1234); 

你快到了。 除以下所有内容外:

  • 您必须将数字更改为字符串
  • 不必每次都重新分配新号码
  • 您必须在循环中使用严格的小于比较

所以

var datArray = ["zero", "one", "two", "three", "four", 
                "five", "six", "seven", "eight", "nine"];
var toEnglish = function (number) {
  number = number.toString();
  var newNumber = "";
  for ( var i = 0; i < number.length; i++ ) {
    newNumber += datArray[number[i]];
  }
  return newNumber;
}
toEnglish(1234); 

编辑

一个功能更强大、更简洁的版本将是

var toEnglish = function (number) {
  return number.toString().split('').map(function(i) {
    return datArray[i]
  }).join(' ');
};

这假设了一个内置map的Javascript版本,但几乎每个库(jQuery,underscore等)都会有一些等效的库。

事实上,如果你确定有一个非常高级的Javascript版本(例如在Firefox中),你可以把它写成

var toEnglish = function (number) {
  return number.toString().split('').map(i => datArray[i]).join(' ');
}

嘘。

数字没有长度:

> console.log(1234.length);
< undefined

必须先将其转换为字符串:

> console.log(String(1234).length);
< 4

您还不断重置newNumber所以我使用了一个数组并附加了项目(因此,如果我们愿意,可以使用分隔符加入)。最后,我删除了循环中的<= number.length并将其替换为< number.length,否则我们将使用不存在的字符。因此,您的代码可以转换为以下内容:

var datArray = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
var toEnglish = function (number) {
    number = String(number); // Cast it
    var result = [];
    for ( var i = 0; i < number.length; i++ ) {
        result.push(datArray[number[i]]); // Add the text to result
    }
    return result.join(' '); // Return the results seperated by space
}

用法:

> toEnglish(1234); 
< "one two three four"

三件事:

  • number是一个数字,没有.length属性。改为传递像"1234"这样的字符串,或者将参数转换为字符串。
  • 您只需将当前数字的单词加倍,覆盖以前的结果并仅返回最后一个结果,即可生成newNumber。相反,使用空字符串初始化并重复连接到它。
  • 循环不能运行到输入的长度,而是低于输入的长度,因为序列从0n-1索引。

function toEnglish(number) {
    number = String(number);
    var newNumber = "";
    for (var i = 0; i < number.length; i++) {
        newNumber += datArray[number[i]];
    }
    return newNumber;
}
console.log(toEnglish(1234)); 

这样的东西可能会起作用,但我看到已经有很多答案了,所以无论如何。感谢您的编码练习。

var datArray = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
var toEnglish = function (number) {
    var exploded = number.toString().split("");
    var newNumber = "";
    exploded.forEach(function(number) {
      newNumber += datArray[ number ];
    });
    // for ( var i = 0; i <= number.length; i++ ) {
    //     var newNumber = datArray[number[i]];
    //     newNumber = newNumber + newNumber;
    // }
    console.log('newNumber', newNumber);
    return newNumber;
}
toEnglish(1234);