这是递归函数的新问题,无法快速找出以下代码为何起作用,但是当试图在一行中完成所有这些操作时,在React 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()));
}
任何帮助解释或说明做即时尝试的更好方法的人将不胜感激。期待评论。
更新:
一个不错的解决方法是创建一个新数组并将旧数据散布到新数据中。不知道性能和内存是否会受到诸如此类的影响,但是它确实起作用。
generateDummyData(num, sentences) {
return num === 1 ? sentences : this.generateDummyData(num-1, [...sentences, randomSentence()]));
}
答案 0 :(得分:4)
sentences.push(randomSentence())
不返回数组,但返回数组的新长度。
push()方法将一个或多个元素添加到数组的末尾,然后 返回数组的新长度。
var test = ["a", "b", "c"];
console.log(test.push("d"));
答案 1 :(得分:1)
您要在第二个示例中传递push
的结果。 result of push is the length of the array,而不是数组本身。这样的事情应该起作用:
return num === 1 ?
sentences :
this.generateDummyData(
num - 1, sentences.push(randomSentence()) && sentences
);
答案 2 :(得分:1)
Push在向其添加元素之后返回数组的大小,因此在将数据传递给函数时使用它时,它将传递返回的值,而不是在推入值之后传递数组的值。您应该改用concat
generateDummyData(num, sentences) {
return num === 1 ? sentences : this.generateDummyData(num-1, sentences.concat([randomSentence()]));
}
答案 3 :(得分:0)
根据Array.prototype.push(),它返回
方法所基于的对象的新length属性 叫。
因此,在您的示例中,您没有将sequences
传递给下一个方法调用,而是传递了序列长度。
这就是为什么这两种方法不相等的原因。