Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 递归数组问题_Javascript_Reactjs_Recursion - Fatal编程技术网

Javascript 递归数组问题

Javascript 递归数组问题,javascript,reactjs,recursion,Javascript,Reactjs,Recursion,对于递归函数来说,这是一个很难回答的问题,不能很快解决为什么下面的代码可以工作,但是当试图在一行中完成所有这些时,js中没有反应 Works: generateDummyData(num, sentences) { sentences.push(randomSentence()); return num === 1 ? sentences : this.generateDummyData(num-1, sentences); } Doesnt Work: generateDum

对于递归函数来说,这是一个很难回答的问题,不能很快解决为什么下面的代码可以工作,但是当试图在一行中完成所有这些时,js中没有反应

Works:
generateDummyData(num, sentences) {
    sentences.push(randomSentence());
    return num === 1 ? sentences : this.generateDummyData(num-1, sentences);
}

Doesnt Work:
generateDummyData(num, sentences) {
    return num === 1 ? sentences : this.generateDummyData(num-1, sentences.push(randomSentence()));
}
任何帮助解释或说明一个更好的方式来做我的尝试将不胜感激。期待您的评论

更新:

一个很好的解决方法是创建一个新的数组,并将旧数据传播到新数组中。不知道性能和内存是否会受到这样的影响,但它确实有效

生成mmydatanum、句子{ return num==1?句子:this.generateDummyDatanum-1,[…句子,随机句子]; } 句子。PushRandom句子不返回数组,但返回数组的新长度

push方法将一个或多个元素添加到数组的末尾,然后 返回数组的新长度

var检验=[a、b、c]; console.logtest.pushd 句子。PushRandom句子不返回数组,但返回数组的新长度

push方法将一个或多个元素添加到数组的末尾,然后 返回数组的新长度

var检验=[a、b、c];
console.logtest.pushd 在第二个示例中,您正在传递push的结果。而不是数组本身。像这样的方法应该会奏效:

return num === 1 ? 
    sentences : 
    this.generateDummyData(
       num - 1, sentences.push(randomSentence()) && sentences
    );

在第二个示例中,您正在传递push的结果。而不是数组本身。像这样的方法应该会奏效:

return num === 1 ? 
    sentences : 
    this.generateDummyData(
       num - 1, sentences.push(randomSentence()) && sentences
    );
根据报告,它返回

方法所基于的对象的新长度属性 打电话来

因此,在您的示例中,您不是将序列传递给下一个方法调用,而是传递序列长度

这就是这两个方法不相等的原因。

根据,它返回

方法所基于的对象的新长度属性 打电话来

因此,在您的示例中,您不是将序列传递给下一个方法调用,而是传递序列长度


这就是这两个方法不相等的原因。

Push在向数组中添加元素后返回数组的大小,因此当您在向函数传递数据时使用它时,它会在推送值后传递返回值,而不是数组值。你应该改用concat

generateDummyData(num, sentences) {
    return num === 1 ? sentences : this.generateDummyData(num-1, sentences.concat([randomSentence()]));
}

Push在向数组中添加元素后返回数组的大小,因此当您在向函数传递数据时使用它时,它会在推送值后传递返回值,而不是数组值。你应该改用concat

generateDummyData(num, sentences) {
    return num === 1 ? sentences : this.generateDummyData(num-1, sentences.concat([randomSentence()]));
}

更新了解决方案更新了解决方案