2017-02-21 9 views
0

Я вложен объект какIterate вложенной 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

Вы смотрели на [Access/процесс (вложенными) объекты, массивы или 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

Спасибо @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; 
});