我有像
这样的嵌套对象{
"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 :(得分: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;
});