使用的意义是什么:string.split(“”)。reverse()。join(“)?

时间:2017-07-30 15:36:28

标签: javascript reverse

我想先说。非常初学者。善待。然而。我试图扭转一个字符串。将字符串作为参数放入函数中并反转其顺序。例如'hello'应该返回'olleh'等等。

我完成了这项工作:

function revString(stringArg) {
    return stringArg.split("").reverse().join(");
}

然而。通过这样做:

function revString (stringArg) {
    stringArg.split("");
    stringArg.reverse();
    stringArg.join("");
    return stringArg;
}

第二个函数的结果输出是reverse()不是函数。有人能告诉我这里的区别是什么吗?

6 个答案:

答案 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}}