![](/img/trans.png)
[英]How could one define the exact data types at any level of a nested object / array data-structure?
[英]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.