2017-02-21 270 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; 
});