我有一個非常簡單的可變引數函式,它回圈遍歷它的引數并向它們添加一個字串“Transformed”。
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
,而是test2
和test3
do)。
uj5u.com熱心網友回復:
當您呼叫函式時,您還需要重新展開陣列(查看 external 的引數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
)
)
uj5u.com熱心網友回復:
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 回傳的陣列以使變換應用于每個元素。您認為有更好的方法可以更直觀地實作相同的結果嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/489054.html
標籤:javascript 递归 ecmascript-6 扩展语法
上一篇:子sql的父平均值-遞回
下一篇:我如何對1253進行遞回求和,得到1 2 5 3,即11,然后加起來得到2,直到我剩下的最后一個數字是Elixir中的一個數字?