迭代嵌套的JSON

时间:2017-02-21 04:08:09

标签: javascript json

我有像

这样的嵌套对象
{
    "root": {
        "company": [{
                "id": "Google",
                "contact": [{
                        "field": "name",
                        "value": "Larry Page"
                    }, {
                        "field": "flag",
                        "value": ""
                    }, {
                        "field": "initial",
                        "value": "LP"
                    }
                ]
            }, {
                "id": "Snap",
                "contact": [{
                        "field": "name",
                        "value": "Evan Spiegel"
                    }, {
                        "field": "flag",
                        "value": "true"
                    }, {
                        "field": "initial",
                        "value": "ES"
                    }
                ]
            }, {
                "id": "Airbnb",
                "contact": [{
                        "field": "name",
                        "value": "Brian Chesky"
                    }, {
                        "field": "flag",
                        "value": ""
                    }, {
                        "field": "initial",
                        "value": "BC"
                    }
                ]
            }
        ]
    }
}

我需要根据标记值创建2个单独的列表 - 一个用于flag = "",另一个用于flag = true

预期结果是2个清单:

var flagisTrue = {ES}
var flagisEmpty = [{"name":"Larry Page", "initial": "LP"}, {"name":"Brian Chesky", "initial": "BC"}]

其中flagisTrue只包含初始值,而flagisEmpty包含名称和初始值。

如何在JavaScript中使用此结构?

2 个答案:

答案 0 :(得分:1)

试试这个。希望它会有所帮助。

var object = {
    "root" : {
        "company" : [{
                "id" : "Google",
                "contact" : [{
                        "field" : "name",
                        "value" : "Larry Page"
                    }, {
                        "field" : "flag",
                        "value" : ""
                    }, {
                        "field" : "initial",
                        "value" : "LP"
                    }
                ]
            }, {
                "id" : "Snap",
                "contact" : [{
                        "field" : "name",
                        "value" : "Evan Spiegel"
                    }, {
                        "field" : "flag",
                        "value" : "true"
                    }, {
                        "field" : "initial",
                        "value" : "ES"
                    }
                ]
            }, {
                "id" : "Airbnb",
                "contact" : [{
                        "field" : "name",
                        "value" : "Brian Chesky"
                    }, {
                        "field" : "flag",
                        "value" : ""
                    }, {
                        "field" : "initial",
                        "value" : "BC"
                    }
                ]
            }
        ]
    }
}

var flagisTrue = [], flagisEmpty = [];
for (var i = 0; i < object.root.company.length; i++) {
    var contact = object.root.company[i].contact;
    var result = {};
    for (var j = 0; j < contact.length; j++)
        result[contact[j].field] = contact[j].value;

    if (result["flag"])
        flagisTrue.push({
            name : result["name"],
            initial : result["initial"]
        });
    else
        flagisEmpty.push({
            name : result["name"],
            initial : result["initial"]
        });
}

console.log(flagisEmpty);
console.log(flagisTrue);

答案 1 :(得分:0)

var flagIsTrue = jsonObj.root.company.filter(function(c){
  return c.contact.filter(function(_contact){
    return (_contact.field == "flag" && _contact.value == "true");
  }).length > 0;
}).map(function(c){
  return c.contact.filter(function(_contact){
    return _contact.field == "initial";
  }).map(function(_contact){
    return _contact.value
  }).join("");
});

var flagIsEmpty = jsonObj.root.company.filter(function(c){
  return c.contact.filter(function(_contact){
    return (_contact.field == "flag" && !_contact.value);
  }).length > 0;
}).map(function(c){
  var obj = {};
  for(var i = 0, len = c.contact.length ; i < len ; i++) {
    if(c.contact[i].field != "flag")
      obj[c.contact[i].field] = c.contact[i].value;
  }
  return obj;
});
相关问题