2017-02-21 166 views
0

我有嵌套的物体,像迭代嵌套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中使用此结构?

+0

你有没有看[交通/过程(嵌套)对象,数组或JSON(http://stackoverflow.com/q/11922383/218196)? –

+0

你应该添加你尝试代码在这里使用'for'你可以迭代数据@snorlax –

回答

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); 
+0

Thanks @MAREESKANNNAN R – snorlax

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; 
});