有一些 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
,方法是仅将当前数字的单词加倍,覆盖之前的结果并仅返回最后一个。相反,用空字符串初始化并重复连接它。
- 循环不得 运行 到输入的长度,而是低于输入的长度,因为序列的索引从
0
到 n-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);
我正在寻找一个程序,无论长度如何,都可以将实数 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
,方法是仅将当前数字的单词加倍,覆盖之前的结果并仅返回最后一个。相反,用空字符串初始化并重复连接它。 - 循环不得 运行 到输入的长度,而是低于输入的长度,因为序列的索引从
0
到n-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);