簡體   English   中英

設置對象屬性,因為對象是在嵌套數據結構中組成的

[英]Setting object properties as the object is composed in a nested data-structure

我正在嘗試編寫一個富有表現力的 JSON 表示,在其中嘗試進行對象組合,直接在組合中設置鍵值。 但是我不能以嵌套的方式組合多個對象。

我想要實現的是一種表達方式,以簡短而簡潔的方式編寫具有可重用對象的對象數據結構,作為 JSX 的替代品——這就是為什么我希望我可以“重用”這些對象組件並嘗試設置子項組成時帶有等號的鍵。 我只想實現沒有庫的原生 JavaScript。 JSX 我猜,如果有人知道,可能是用正則表達式從字符串轉換 HTML 標簽? 我更喜歡使用對象文字的解決方案。 任何想法,將不勝感激。

例子:

const foo = {
    name: 'Bob',
    abilities: {
        superpower: 'Says grrr',
        mood: 'Gruchy'
    }
}

const bar = {
    name: 'Denny',
    abilities: {
        superpower: 'Diabetes',
        mood: 'Hopeful'
    }
}

const dataStructure = {
    name: 'something',
    children: [
        foo.children = [ // 'foo' object will result in an array, even if we only set .children
            bar.children = [
                {
                    name: 'somethingElse'
                }
            ]
        ]
    ]
}

/*
    Desired resulting data structure:

    {
        name: 'something',
        children: [
            {
                name: 'Bob',
                abilities: {
                    superpower: 'Says grrr',
                    mood: 'Gruchy'
                },
                children = [
                    {
                        name: 'Denny',
                        abilities: {
                            superpower: 'Diabetes',
                            mood: 'Hopeful'
                        },
                        children = [
                            {
                                name: 'somethingElse'
                            }
                        ]
                    }
                ]
            }
        ]
    }
*/

這是工作示例:

 const foo = { name: 'Bob', abilities: { superpower: 'Says grrr', mood: 'Gruchy' } } const bar = { name: 'Denny', abilities: { superpower: 'Diabetes', mood: 'Hopeful' } } const dataStructure = { name: 'something', children: [{ ...foo, children: foo.children = [{ ...bar, children: bar.children = [{ name: 'somethingElse' }] }] }] } console.log('Result:', dataStructure) console.log('Foo:', foo) console.log('Bar:', bar)

注意:但這很奇怪你想要做什么......

你必須在你的變量定義之外設置你的 bar.children,所以我猜它不會再被調用。 有這樣的表達:

bar.children = 
{
    name: 'somethingElse'
}

const dataStructure = {
    name: 'something',
    children: 
        [foo,
        children = [bar]]
}

會給你以下輸出:

{
    "name": "something",
    "children": [
        {
            "name": "Bob",
            "abilities": {
                "superpower": "Says grrr",
                "mood": "Gruchy"
            }
        },
        [
            {
                "name": "Denny",
                "abilities": {
                    "superpower": "Diabetes",
                    "mood": "Hopeful"
                },
                "children": {
                    "name": "somethingElse"
                }
            }
        ]
    ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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