JS - 在递归场景中附加到相同的字符串

时间:2013-11-15 10:54:06

标签: javascript string recursion reference immutability

我读到JS中的stings是不可变的,即使JS的默认值似乎是“通过引用传递”,在递归层次结构中传递相同的字符串也不会附加到相同的字符串,而是创建副本。

我的场景需要创建一个字符串对象,并在递归和其他函数的非常深层次的层次结构中传递,那么我该如何实现呢?我是一个C ++人,在C ++中它非常简单......只需通过引用传递,所有函数都在同一个字符串上工作。

2 个答案:

答案 0 :(得分:0)

您可以使用包装器对象模拟原始值的引用传递。这涉及到改变你的功能以便意识到:

function append(strWrapper,n) {
  if (n <= 0) {
    return strWrapper;
  } else {
    strWrapper.val += n;
    return append(strWrapper, n-1);
  }
}

console.log(append({ val : '' }, 9).val); // 987654321

当然,如果您愿意,包装器对象可以变成包装类。

* JS确实仅通过引用传递对象,而不是原始值

答案 1 :(得分:0)

您可以在通过引用传递数组/字符串对象的同时传递它们,类似于下面的代码来查找子序列,我已经传递了字符串数组(输出),以存储在每次调用中传递的所有子序列 `

function subsequence( input, output){
    if(input.length==0)
    {
        output[0]="";
        return 1;
    }

    let  smallStr = input.substr(1); 
    let  smallerSeqSize = subsequence(smallStr,output);

    for(let i=0;i<smallerSeqSize;i++){
        output[smallerSeqSize+i] = input[0]+output[i]; 
    }

    

    return 2*smallerSeqSize;
}


 function main(){

    let input = "abc";
    let output = new Array("")

    let sizeOutput = subsequence(input,output);

    console.log(output)

    
}`