有一些 javascript 麻烦,for 循环。将数字转换为字符串值

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

我正在寻找一个程序,无论长度如何,都可以将实数 concoatate(sp?) 成一个字符串。出于这些目的,1234 可以很好地转换为 "one""two""three""four" 或 "onetwothreefour" 或 w/e。我试图通过遍历实数然后遍历数组来做到这一点。我在节点中的输出未通过我的 console.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); 

一个数字没有长度:

> 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"

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

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

所以

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(' ');
};

这假设 Javascript 的版本内置了 map,但几乎每个库(jQuery、下划线等)都会有一些等价物。

事实上,如果您确定确实高级版本的Javascript(例如在Firefox中),您可以将其写成

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

嘘。

三件事:

  • 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);