Mental JSON cartwheels,按键匹配值

时间:2017-04-13 03:29:46

标签: javascript json node.js

我有这个JSON对象:

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

我想得到一个看起来像这样的对象:

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

我提出的每个算法都非常冗长,任何人都会想到快速而聪明的东西?

2 个答案:

答案 0 :(得分:3)

var newObj = {};

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

我真的不是一个js dev,但这是我要开始的地方。

上面的代码是在没有任何语法检查的情况下编写的。我不知道它是否真的会编译。

答案 1 :(得分: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);