![](/img/trans.png)
[英]Javascript function to convert deeply nested object to shallow object with concatenated keys
[英]Replacing a function deeply nested inside an object in javascript
我有一個包含潛在深度嵌套函數的對象(可能比這更多,所以我需要一個可以在任何深度工作的解決方案):
x = {
a: function() { console.log ("original function 1") },
b: {
c: {
d: function() { console.log ("original function 2") }
}
}
}
我希望能夠將函數的鍵路徑作為參數傳遞給另一個函數,並用新函數替換原始函數:
g = function( functionAddress ) {
functionAddress = function() { console.log( "replacement function" )}
}
以便在執行后:
g("x.b.c.d");
x.b.c.d() // replacement function
g("x.a");
x(a) // replacement function
我已經能夠使用 split、shift 和 reduce 處理參數,因此我可以訪問指定地址處的函數,如下所示:
密鑰路徑 = x["b"]["c"]["d"]
但是如果我嘗試使用 newFunc 替換該位置的函數,它只會替換 keypath 的值,而不是該地址的函數。
任何幫助,將不勝感激。 謝謝!
沒有直接的方法可以做到這一點。 相反,您必須實現您的功能才能這樣做。
這是一種或多或少的簡單方法,使用Array#split()
和Array#reduce()
:
const x = {
a: function() { console.log ("original function 1") },
b: {
c: {
d: function() { console.log ("original function 2") }
}
}
}
const setDeep = (object, path, value)=>{
const pathArray=path.split('.')
pathArray.slice(0,-1).reduce(Reflect.get,object)[pathArray[pathArray.length-1]]=value
}
setDeep(x, 'b.c.d', function(){console.log('replacement function')});
x.b.c.d() //replacement function
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.