我想先说。非常初学者。善待。然而。我试图扭转一个字符串。将字符串作为参数放入函数中并反转其顺序。例如'hello'应该返回'olleh'等等。
我完成了这项工作:
function revString(stringArg) {
return stringArg.split("").reverse().join(");
}
然而。通过这样做:
function revString (stringArg) {
stringArg.split("");
stringArg.reverse();
stringArg.join("");
return stringArg;
}
第二个函数的结果输出是reverse()不是函数。有人能告诉我这里的区别是什么吗?
答案 0 :(得分:1)
这是因为split()
没有将字符串拆分为,而是将拆分字符串作为新值返回。在第二个函数中,您执行stringArg.split()
,但由于该操作不会发生,stringArg
永远不会发生变异。它始终保留完全相同的值和类型,这会导致您看到的错误。
第一个函数工作的原因是函数调用应用于前一个调用的返回值。换句话说:
split()
上调用stringArg
reverse()
在split()
的返回值上调用,这是一个数组,因此可以直接反转join()
在reverse()
但是在第二个函数中,你将它们全部调用完全相同的变量stringArg
,它始终保持不变。为了使您的功能正常工作,您需要像以下一样进行修改:
function revString (stringArg) {
a = stringArg.split(""); // Array
b = a.reverse(); // Reversed array
c = b.join(""); // String
return c;
}
然而,这虽然更容易理解,但也是不必要的冗长。我建议坚持使用原始功能。
答案 1 :(得分:0)
第一个示例链接前一个方法调用的结果,其中.split()
返回一个数组作为链中的第一个链接。
第二个示例在每行的原始字符串上执行单独的任务,而不是链接到返回数组的第一行。
.reverse()
不是String.prototype
定义的方法,导致函数调用第二行stringArg.reverse()
处的错误。
答案 2 :(得分:0)
stringArg.split("");
- 返回一个数组。数组有方法reverse()
。这就是为什么在第一种情况下一切都很好。
在第二种情况下,您尝试调用字符串reverse()
的方法stringArg
。而字符串的原型没有方法reverse()
:
console.log(String.prototype.reverse); // undefined
console.log(Array.prototype.reverse); // function reverse() { [native code] }
这就是你在控制台中看到的原因
reverse()不是函数
但是,您可以在String的原型中定义自己的reverse
。检查this问题和答案。
答案 3 :(得分:0)
String#split
函数无效 in situ (不会改变原始字符串)。这就是为什么你不能使用只能在数组上调用的Array#reverse
函数。您可以尝试将新的接收数组分配到一个新变量然后使用Array#reverse
,它可以原位(改变原始数组)然后, return joined array。
function revString(stringArg) {
let arr = stringArg.split("");
arr.reverse();
return arr.join("");
}
console.log(revString('hello'));
答案 4 :(得分:0)
这是因为.reverse()
的输出使用了.split("")
。
单独使用.reverse()
并不起作用,因为除非您使用stringArg = stringArg.split("");
重新分配,否则之前的行不会直接更改它。第一行返回字符数组,但不会直接更改stringArg
。
所以:
stringArg.split("").reverse().join("");
表示join
数组中所有元素,其元素的格式为reverse
,基于字符串的split
。换句话说,.reverse()
上使用stringArg.split("")
,而不只是stringArg
,.join("")
使用stringArg.split("").reverse()
:stringArg
仅适用于function revString2 (stringArg) {
a = stringArg.split("");
b = a.reverse();
c = b.join("");
return c;
}
function revString ( stringArg ) {
stringArg=stringArg . split ( "" );
stringArg=stringArg . reverse ();
stringArg=stringArg . join ( "" ); return stringArg ; }
因此解决方案将是:
{{1}}
答案 5 :(得分:0)
String.split()返回一个新值,它是str中所有字符的数组 Array.reverse返回一个内容相反的数组 Join返回一个字符串 这些功能虽然反过来可能不会改变它们的价值,但我不确定。 stringArgs变量下面设置为每个函数的返回值 尝试:
{{1}}