[英]How to improve this complex json object/array to a map with Inheritance code
我想要以下json的對象數組(僅1級):
[
{
'family' : {
'name' : 'Doe',
'from' : 'Foo'
},
'couples' : [
{
'couple' : {
'man' : 'Joe',
'woman' : 'Jane'
},
'childrens' : [
{
'name' : 'Joseph',
'sex' : 'male'
},
{
'name' : 'Martin',
'sex' : 'male'
}
]
},
{
'couple' : {
'man' : 'Richard',
'woman' : 'Rose'
},
'childrens' : [
{
'name' : 'Rose',
'sex' : 'female'
},
{
'name' : 'Joe',
'sex' : 'male'
}
]
}
]
}
]
我想將所有子元素保留在一個數組中(在這種情況下為4個元素),並且每個元素的父元素都更新了__proto__
(這對夫婦有家庭,孩子有夫婦)。 這樣,我將能夠輕松訪問父母。
但是我不知道我的解決方案是最好的解決方案,還是有其他相同的方法可以做到這一點。
我的想法是做這樣的事情:
var childrensArr = [];
for (var i = 0; i < json.length; i++) {
var family = json[i].family;
var couples = json[i].couples;
for (var j = 0; j < couples.length; j++) {
var couple = couples[j].couple;
var childrens = couples[j].childrens;
for (var y = 0; y < childrens.length; y++) {
var children = childrens[y];
children.__proto__ = { couple : couple, family : family};
childrensArr.push(children);
}
}
}
但是,並非所有這些陣列看起來都正確,是否有人提出相同的建議來改進此解決方案? (如果沒有可能,則沒有框架)。
非常感謝!
編輯
下面是使用我的代碼的示例。
var json = [ { 'family' : { 'name' : 'Doe', 'from' : 'Foo' }, 'couples' : [ { 'couple' : { 'man' : 'Joe', 'woman' : 'Jane' }, 'childrens' : [ { 'name' : 'Joseph', 'sex' : 'male' }, { 'name' : 'Martin', 'sex' : 'male' } ] }, { 'couple' : { 'man' : 'Richard', 'woman' : 'Rose' }, 'childrens' : [ { 'name' : 'Rose', 'sex' : 'female' }, { 'name' : 'Joe', 'sex' : 'male' } ] } ] } ] var childrensArr = []; for (var i = 0; i < json.length; i++) { var family = json[i].family; var couples = json[i].couples; for (var j = 0; j < couples.length; j++) { var couple = couples[j].couple; var childrens = couples[j].childrens; for (var y = 0; y < childrens.length; y++) { var children = childrens[y]; children.__proto__ = { couple : couple, family : family}; childrensArr.push(children); } } } console.log(childrensArr); //It's possible to get the family attrs or the couple attrs console.log(childrensArr[0].family.name);
PS:看例子,我可以訪問childrensArr[0].family.name
您可以使用嵌套方法使用Array#reduce
獲取所有子級。
var data = [{ family: { name: 'Doe', from: 'Foo' }, couples: [{ couple: { man: 'Joe', woman: 'Jane' }, children: [{ name: 'Joseph', sex: 'male' }, { name: 'Martin', sex: 'male' }] }, { couple: { man: 'Richard', woman: 'Rose' }, children: [{ name: 'Rose', sex: 'female' }, { name: 'Joe', sex: 'male' }] }] }], children = data.reduce(function (r, a) { return r.concat(a.couples.reduce(function (s, b) { return s.concat(b.children); }, r)); }, []); console.log(children);
.as-console-wrapper { max-height: 100% !important; top: 0; }
用couple
屬性編輯。
var data = [{ family: { name: 'Doe', from: 'Foo' }, couples: [{ couple: { man: 'Joe', woman: 'Jane' }, children: [{ name: 'Joseph', sex: 'male' }, { name: 'Martin', sex: 'male' }] }, { couple: { man: 'Richard', woman: 'Rose' }, children: [{ name: 'Rose', sex: 'female' }, { name: 'Joe', sex: 'male' }] }] }], children = data.reduce(function (r, a) { return r.concat(a.couples.reduce(function (s, b) { return s.concat(b.children.map(function (c) { return Object.assign({ couple: b.couple }, c); })); }, r)); }, []); console.log(children);
.as-console-wrapper { max-height: 100% !important; top: 0; }
var childrens=family_json[0].couples.map(function(couple){
return couple.childrens;
});
該map函數將僅返回JSON對象中的childs
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.