2017-04-13 46 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在这种情况下有更强大的功能? –