2017-07-02 165 views
0

我知道有很多方法可以將點分隔的字符串映射到js對象,並且有數百個問題與答案在這裏關於那個。將js對象轉換爲字符串映射(與通常的字符串對象相反)

但我需要做的相反:

要轉換此:

let object = { 
    parts: { 
    x: { 
     create:() => { 
     alert(321); 
     }, 
     update:() => { 
     alert(321); 
     } 
    }, 
    y: { 
     create:() => { 
     alert(321); 
     }, 
     update:() => { 
     alert(321); 
     } 
    } 
    } 
} 

要這樣:

{ 
    'parts.x.create':() => { 
    alert(321); 
    }, 
    'parts.x.update':() => { 
    alert(321); 
    }, 
    'parts.y.create':() => { 
    alert(321); 
    }, 
    'parts.y.update':() => { 
    alert(321); 
    } 
} 

我覺得我開始重塑當我開始輪爲此編寫代碼。有沒有其他人做過或看過這個?

+0

因爲這裏沒有什麼工作? https://www.google.com/search?q=convert+json+to+dot+notation – mplungjan

+0

發明輪子:)分享到github上。最後這將是一個遞歸映射函數 – Volem

+0

有趣的是JSON.stringify返回'{「部分」:{「x」:{},「y」:{}}}' – mplungjan

回答

1

這應該做的伎倆:

let object = { 
 
    parts: { 
 
    x: { 
 
     create:() => { 
 
     alert(321); 
 
     }, 
 
     update:() => { 
 
     alert(321); 
 
     } 
 
    }, 
 
    y: { 
 
     create:() => { 
 
     alert(321); 
 
     }, 
 
     update:() => { 
 
     alert(321); 
 
     } 
 
    } 
 
    } 
 
}; 
 

 
let convert = (value, keys = '', obj = {}) => { 
 
    if (typeof value === 'object') { 
 
    for (let index in value) { 
 
     convert(value[index], (keys && keys + '.') + index, obj); 
 
    } 
 
    } else { 
 
    obj[keys] = value; 
 
    } 
 
    return obj; 
 
} 
 

 
let newObject = convert(object); 
 
console.log(newObject);