簡體   English   中英

如何使用繼承代碼將此復雜的json對象/數組改進為映射

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM