2017-04-13 45 views
0

匹配值我有這樣的JSON對象:心理JSON側手翻,通過關鍵

{ 
    "foo" : { 
     "58eedc4298d1712b870c8e0a" : false, 
     "58eedc4298d1712b870c8e06" : true, 
     "58eedc4198d1712b870c8e05" : true 
    }, 
    "bar" : { 
     "58eedc4298d1712b870c8e0a" : "git", 
     "58eedc4298d1712b870c8e06" : "svn", 
     "58eedc4198d1712b870c8e05" : "hg" 
    }, 
} 

我想獲得一個物體,看起來像:

{ 
    git: false, 
    svn: true, 
    hg: true 
} 

每一個算法我已經想出了很詳細,任何人想到快速和聰明的東西?

+0

請注意,理論上我們需要防範一個對象具有不同數量的鍵/值對的可能性。 –

+0

那麼如果他們不同,會發生什麼。你也可以展示你的嘗試,因爲你可能走在正確的軌道上。 –

回答

3
var newObj = {}; 

for (let property in obj.bar) { 
    if obj.bar.hasOwnProperty(property){ 
     newObj[obj.bar[property]] = obj.foo[property]; 
    } 
} 

我真的不一個 JS開發,但是這是我將開始。

上面的代碼沒有任何語法檢查。我不知道它是否會真正編譯。

1

如果您使用lodash(如果不是,您應該),您可以按照以下方法。

var _ = require("lodash"); 

var data = { 
    "foo": { 
     "58eedc4298d1712b870c8e0a": false, 
     "58eedc4298d1712b870c8e06": true, 
     "58eedc4198d1712b870c8e05": true 
    }, 
    "bar": { 
     "58eedc4298d1712b870c8e0a": "git", 
     "58eedc4298d1712b870c8e06": "svn", 
     "58eedc4198d1712b870c8e05": "hg", 
     "58eedc4198d1712b870c8e06": "fa" 

    }, 
} 
var keys = _.keys(data.bar); 
var result = {}; 
_.forEach(keys, function (key) { 
    result[data.bar[key]] = data.foo[key] ? data.foo[key] : false; 
}); 
console.log(result); 
+0

Object.keys()和keys.forEach()應該沒問題。也許lodash在這種情況下有更強大的功能? –