为什么我的 JS for 循环不起作用? (returns "undefinded"
Why is my JS for loop not working? (returns "undefinded"
我正在做一个 JS 练习,它要求我按相反的顺序 return 一个数字组合 (1234 => 4321) 所以我一如既往地尝试自己做而不寻找解决方案,我来了与:
function rev(n){
for(i=n.length;i=0;i--){
var reversed = reversed + n[i];
}
return reversed;
}
console.log(rev("test"));
但是当我在 VSCode 上 运行 时,它 return 对我来说是未定义的,我不明白我的代码的哪一部分是错误的。有什么想法吗?
您在 for
循环中定义 reversed。您需要做什么:
function rev(n) {
let reversed = "";
for (let i = n.length - 1; i >= 0; i--) {
reversed = `${reversed}${n[i]}`;
}
return reversed;
}
console.log(rev("test"));
必须使用循环吗?
代码如下:
String(1234) // make the number a string
.split("") // split on char making an array
.reverse() // reverse that array
.join("") // join it back
+
将反转的字符串转换回数字
console.log(
+String(1234).split("").reverse().join("")
)
您可以按照下面的代码片段修改现有代码,它会正常工作
function rev(str){
var n = str.split("");
var reversed ="";
for(i=n.length-1; i >= 0 ; i--){
reversed +=n[i];
}
return reversed;
}
console.log(rev("1234"));
保留字符串的最佳方式
const reverseStr = str => {
var splitString = str.split("");
var reverseArray = splitString.reverse();
var joinArray = reverseArray.join("");
return joinArray;
};
你可以这样做:
const reverseString = text => {
let result = "";
for (let i = text.length - 1; i > -1; i--) {
result += text[i];
}
return result;
};
console.log(reverseString('test'));
好的,我明白你的意思了。您打算实现它并且想知道为什么 您的 代码没有按预期工作。感谢您勇敢的做法。让我们逐步解决您遇到的问题:
初始代码
function rev(n){
for(i=n.length;i=0;i--){
var reversed = reversed + n[i];
}
return reversed;
}
console.log(rev("test"));
在循环外定义反转
function rev(n){
var reversed = "";
for(i=n.length;i=0;i--){
var reversed = reversed + n[i];
}
return reversed;
}
console.log(rev("test"));
说明:您的代码在每一步都在循环内重新创建它,并且假设它没有以某种方式在函数外部定义,它会在第一次使用时崩溃。在将任何内容连接到它之前,您需要正确初始化它。
修复串联
function rev(n){
var reversed = "";
for(i=n.length;i=0;i--){
reversed = reversed + n[i];
}
return reversed;
}
console.log(rev("test"));
解释:删除了循环内的 var
关键字,因此您可以重复使用 reversed
并正确地将 n[i]
连接到它。
正确定义 i
function rev(n){
var reversed = "";
for(let i = n.length - 1;i=0;i--){
reversed = reversed + n[i];
}
return reversed;
}
console.log(rev("test"));
说明:您需要确保 i
作为变量存在。另外,我们从 n.length - 1
初始化它,因为索引从 0 开始,所以第一个元素的索引为 0,第二个元素的索引为 1 并且...第 k 个元素的索引为k-1,因此 n
的最后一个元素是 n.length - 1
并且,正如您已经正确理解的那样,最后一个元素必须是第一个元素。
修复继续条件
function rev(n){
var reversed = "";
for(let i = n.length - 1;i>=0;i--){
reversed = reversed + n[i];
}
return reversed;
}
console.log(rev("test"));
解释:你假设for里面的第二条语句是结束条件,但恰恰相反:它是继续条件。它将普通单词翻译为 "repeat as long as",而不是 "repeat until".
防御性地做
function rev(n){
var reversed;
if (typeof n === "string") {
reversed = "";
for(let i = n.length - 1;i>=0;i--){
reversed = reversed + n[i];
}
}
return reversed;
}
console.log(rev("test"));
说明:只有当它是一个字符串时,我们才会进行还原。
让我们支持数组:
function rev(n){
var reversed;
if (typeof n === "string") {
reversed = "";
for(let i = n.length - 1;i>=0;i--){
reversed = reversed + n[i];
}
} else if (Array.isArray(n)) {
reversed = [];
for(let i = n.length - 1;i>=0;i--){
reversed.push(n[i]);
}
}
return reversed;
}
console.log(rev("test"));
console.log(rev(["t","e","s","t"]));
说明:数组的算法与字符串的算法相似,但我们仍然应对技术差异。
我正在做一个 JS 练习,它要求我按相反的顺序 return 一个数字组合 (1234 => 4321) 所以我一如既往地尝试自己做而不寻找解决方案,我来了与:
function rev(n){
for(i=n.length;i=0;i--){
var reversed = reversed + n[i];
}
return reversed;
}
console.log(rev("test"));
但是当我在 VSCode 上 运行 时,它 return 对我来说是未定义的,我不明白我的代码的哪一部分是错误的。有什么想法吗?
您在 for
循环中定义 reversed。您需要做什么:
function rev(n) {
let reversed = "";
for (let i = n.length - 1; i >= 0; i--) {
reversed = `${reversed}${n[i]}`;
}
return reversed;
}
console.log(rev("test"));
必须使用循环吗?
代码如下:
String(1234) // make the number a string
.split("") // split on char making an array
.reverse() // reverse that array
.join("") // join it back
+
将反转的字符串转换回数字
console.log(
+String(1234).split("").reverse().join("")
)
您可以按照下面的代码片段修改现有代码,它会正常工作
function rev(str){
var n = str.split("");
var reversed ="";
for(i=n.length-1; i >= 0 ; i--){
reversed +=n[i];
}
return reversed;
}
console.log(rev("1234"));
保留字符串的最佳方式
const reverseStr = str => {
var splitString = str.split("");
var reverseArray = splitString.reverse();
var joinArray = reverseArray.join("");
return joinArray;
};
你可以这样做:
const reverseString = text => {
let result = "";
for (let i = text.length - 1; i > -1; i--) {
result += text[i];
}
return result;
};
console.log(reverseString('test'));
好的,我明白你的意思了。您打算实现它并且想知道为什么 您的 代码没有按预期工作。感谢您勇敢的做法。让我们逐步解决您遇到的问题:
初始代码
function rev(n){
for(i=n.length;i=0;i--){
var reversed = reversed + n[i];
}
return reversed;
}
console.log(rev("test"));
在循环外定义反转
function rev(n){
var reversed = "";
for(i=n.length;i=0;i--){
var reversed = reversed + n[i];
}
return reversed;
}
console.log(rev("test"));
说明:您的代码在每一步都在循环内重新创建它,并且假设它没有以某种方式在函数外部定义,它会在第一次使用时崩溃。在将任何内容连接到它之前,您需要正确初始化它。
修复串联
function rev(n){
var reversed = "";
for(i=n.length;i=0;i--){
reversed = reversed + n[i];
}
return reversed;
}
console.log(rev("test"));
解释:删除了循环内的 var
关键字,因此您可以重复使用 reversed
并正确地将 n[i]
连接到它。
正确定义 i
function rev(n){
var reversed = "";
for(let i = n.length - 1;i=0;i--){
reversed = reversed + n[i];
}
return reversed;
}
console.log(rev("test"));
说明:您需要确保 i
作为变量存在。另外,我们从 n.length - 1
初始化它,因为索引从 0 开始,所以第一个元素的索引为 0,第二个元素的索引为 1 并且...第 k 个元素的索引为k-1,因此 n
的最后一个元素是 n.length - 1
并且,正如您已经正确理解的那样,最后一个元素必须是第一个元素。
修复继续条件
function rev(n){
var reversed = "";
for(let i = n.length - 1;i>=0;i--){
reversed = reversed + n[i];
}
return reversed;
}
console.log(rev("test"));
解释:你假设for里面的第二条语句是结束条件,但恰恰相反:它是继续条件。它将普通单词翻译为 "repeat as long as",而不是 "repeat until".
防御性地做
function rev(n){
var reversed;
if (typeof n === "string") {
reversed = "";
for(let i = n.length - 1;i>=0;i--){
reversed = reversed + n[i];
}
}
return reversed;
}
console.log(rev("test"));
说明:只有当它是一个字符串时,我们才会进行还原。
让我们支持数组:
function rev(n){
var reversed;
if (typeof n === "string") {
reversed = "";
for(let i = n.length - 1;i>=0;i--){
reversed = reversed + n[i];
}
} else if (Array.isArray(n)) {
reversed = [];
for(let i = n.length - 1;i>=0;i--){
reversed.push(n[i]);
}
}
return reversed;
}
console.log(rev("test"));
console.log(rev(["t","e","s","t"]));
说明:数组的算法与字符串的算法相似,但我们仍然应对技术差异。