将参数传递给另一个函数并返回更改的值不起作用

时间:2018-06-02 15:11:17

标签: javascript

可以解释为什么这个函数返回其原始参数值而不是更改的值。

编辑:仅供参考我知道问题的解决方案我已经不知道'引擎盖'发生了什么;是什么导致这不起作用。我希望更好地理解语言

function helper(value){
  let hold = value;
    hold.replace(/[^\w]/g, '')
    hold.split('')
    hold.sort()
    hold.join('')
    hold.toLowerCase()

    return hold
}

console.log(helper('hello world')) <--- returns 'hello world'

3 个答案:

答案 0 :(得分:3)

您需要重新分配,这些功能不会更改原始值,需要重新分配。您还可以使用运算符组合所有操作并缩短代码,如下所示

function helper(value){
    return value.replace(/[^\w]/g, '').split('').sort().join('').toLowerCase();
}

console.log(helper('hello world')) 

或者,您可以像这样更正您的代码

function helper(value){
  let hold = value;
  hold = hold.replace(/[^\w]/g, ''); // re-assign
  hold = hold.split(''); // re-assign
  hold.sort(); // sort updates hold - re-assignment not required
  hold = hold.join(''); // re-assign
  hold = hold.toLowerCase(); // re-assign
  return hold;
}

console.log(helper('hello world'))

答案 1 :(得分:1)

replace不会修改输入参数,而是返回一个新字符串。

答案 2 :(得分:0)

我找到了“为什么”代码按原样行事的解决方案。 这是因为数组和对象是可变的,而字符串和数字以及其他基元是不可变的。

了解更多信息,请阅读此博客 What are immutable and mutable data structures?

解决方案由“Nikhil Aggarwal”发布在这里