我正在使用angular-translate進行大型應用。有幾個人提交代碼+翻譯,很多時候翻譯對象不同步。比較JavaScript中的2個JSON對象結構
我正在構建一個Grunt插件來查看兩個文件的結構並比較它(只是鍵和整體結構,而不是值)。
的主要目標是:
- 查找到每個文件中,並檢查是否整個對象 (或文件,在這種情況下)的結構是完全相同的作爲轉換後的那些;
- 出錯時,返回不匹配的密鑰。
事實證明這比我預期的要複雜一點。所以我想我可以這樣做:
-
排序對象; - 檢查值包含的數據的類型(因爲它們是翻譯,它將只有字符串或嵌套的對象)並將其存儲在另一個對象中,使該鍵等於原始鍵並且該值將是一個字符串'String',或者一個對象,以防它是一個對象。該對象包含子元素;
- 遞歸地重複步驟1-2直到整個對象被映射和排序;
- 對所有文件都做同樣的處理
- 將所有文件進行串聯和比較。
一個微小的例子是下列對象:
{
key1: 'cool',
key2: 'cooler',
keyWhatever: {
anotherObject: {
key1: 'better',
keyX: 'awesome'
},
aObject: 'actually, it\'s a string'
},
aKey: 'more awesomeness'
}
將映射到:
{
aKey: 'String',
key1: 'String',
key2: 'String',
keyWhatever: {
aObject: 'String',
anotherObject: {
key1: 'String',
keyX: 'String'
}
}
}
在此之後,我將字符串化的所有對象,並用嚴格比較進行。
我的問題是,有沒有更好的方法來執行此操作?無論是在簡單性和性能方面,因爲有很多翻譯文件,而且它們相當大。
我試圖尋找已經可以做到這一點的庫,但是我找不到任何庫。
謝謝
編輯:謝謝您對賈裏德指出對象不能進行排序。我很慚愧這樣說:D另一種解決方案可能是迭代主翻譯文件中的每個屬性,並且如果它們是字符串,則將該關鍵字與其他文件進行比較。如果它們是對象,則「輸入」它們,並執行相同的操作。也許它比我的第一個猜測更簡單。應該做什麼?
雖然許多實現維護*插入*順序,每個規範JavaScript對象是*無序*鍵/值對。你將不得不使用'Object.keys'並使用數組,你不能'排序'對象。 –
謝謝Jared。我糾正了我的問題細節! – fgarci03
這是一個很大的問題,所以我不聲稱有解決方案,但有一件事你可能沒有想到:你會如何對待它? 'root = {我:root}'(也許你會拋出一個錯誤,但是你不能使頁面永遠崩潰) – Katana314