我有一个这样的数组...
a["a"] = "aa"
a["b"] = "ab"
a["c"] = "ac"
a["d"]["a"] = "ada"
a["d"]["b"]["a"] = "adba"
a["e"]["a"]["a"]["a"] = "aeaaa"
Run Code Online (Sandbox Code Playgroud)
...并想克隆它
clone(b, a)
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止尝试过的:
function clone(lhs, rhs){
for (i in rhs) {
if (typeof(arr[i]) == "array"){
clone(lhs[i], rhs[i])
} else {
lhs[i] = rhs[i]
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这显然不起作用,因为b["d"]
在a["d"]["a"]
分配给b["d"]["a"]
. 第二个问题是b["d"]
应该输入为array
.
您需要在克隆之前初始化子数组:
function clone(lhs, rhs) {
for (i in rhs) {
if (isarray(rhs[i])) {
lhs[i][1] = ""
delete lhs[i][1]
clone(lhs[i], rhs[i])
} else {
lhs[i] = rhs[i]
}
}
}
Run Code Online (Sandbox Code Playgroud)
gawk
手册页中提到了写值然后删除它的技巧。
(我还修复了阵列检测,使用isarray
.)