Javascript的第一个参数在具有扩展参数的嵌套函数中被忽略



我有一个非常简单的可变函数,它循环遍历它的参数并添加一个字符串"。

function Transform(...children) {
return children.map(child=> child + " Transformed")
}
document.write(
Transform(
Transform(" test1", " test2"), //only test2 gets double transformed
Transform(" test3") //here the first argument gets double transformed though
)
)

由于一些奇怪的原因,当嵌套它们时,如果我只有一个参数,它会像预期的那样工作,但如果我有多个参数,它不会影响第一个参数。

如何使函数将字符串Transformed添加到所有参数的末尾?(您可以看到test1后面没有两个Transformed,但test2test3有)。

在调用函数时也需要重新展开数组(查看外部Transform的参数):

function Transform(...children) {
return children.map(child=> child + " Transformed")
}
document.write(
Transform(
...Transform(" test1", " test2"), //only test2 gets double transformed
...Transform(" test3") //here the first argument gets double transformed though
)
)

如果您希望函数处理这两种情况,那么只需检查每个元素是否为数组,如果元素是数组,则使用Transform处理它:

function Transform(...children) {
return children.map(child => Array.isArray(child) ? Transform(...child) : child + " Transformed");
}
document.write(
Transform(
Transform(" test1", " test2"), //only test2 gets double transformed
Transform(" test3") //here the first argument gets double transformed though
)
)

更详细的版本:

function Transform(...children) {
return children.map(child => {
if (Array.isArray(child)) return Transform(...child)
else return child + " Transformed";
});
}
document.write(
Transform(
Transform(" test1", " test2"), //only test2 gets double transformed
Transform(" test3") //here the first argument gets double transformed though
)
)

function Transform(...children) {
return children.map(child=> child + " Transformed")
}
document.write(
Transform(
...Transform("test1", "test2"), //only test2 gets double transformed
Transform("test3") //here the first argument gets double transformed though
)
)

好的,我刚刚发现我必须展开由内部变换返回的数组,以使变换应用于每个元素。你认为是否有更好的方法可以用更直观的方式达到同样的结果?

最新更新