Javascript 嵌套数组中的数据操作
在下面的数据结构中Javascript 嵌套数组中的数据操作,javascript,typescript,Javascript,Typescript,在下面的数据结构中 data = { data: [{ areas: [{ sections: [{ rjf: [{ type: 'heading-1' text: 'Sample Heading', }] }, { rjf: [{ type: 'paragraph', dept
data = {
data: [{
areas: [{
sections: [{
rjf: [{
type: 'heading-1'
text: 'Sample Heading',
}]
},
{
rjf: [{
type: 'paragraph',
depth: 0,
text: 'This website is offered to you by:',
inlineStyleRanges: [],
inlineEntityRanges: []
},
{
"type": "ordered-list-item",
"text": "Ordered Item A",
},
{
"type": "unordered-list-item",
"text": "Ordered Item B",
},
{
type: 'paragraph',
depth: 0,
text: 'This website is offered to you by:',
inlineStyleRanges: [],
inlineEntityRanges: []
},
{
"type": "ordered-list-item",
"text": "Ordered Item A",
},
{
"type": "unordered-list-item",
"text": "Ordered Item B",
}
]
}
]
}]
}]
};
我正在尝试将所有作为有序列表项
&无序列表项
的类型分组到新对象中。像下面这样
{
"type": 'list',
"items": [
{
"type": "ordered-list-item",
"text": "Ordered Item A",
},
{
"type": "unordered-list-item",
"text": "Ordered Item B",
}
]
}
经过这么多的高音,我得出了以下解决方案。这个很好用。
但是有一个问题,在rjf
中,如果有序列表项
和无序列表项
未找到,则不应发生任何不幸的情况,并且将空的列表
添加到rjf
下面是代码片段,请帮助我解决此问题
const数据={
数据:[{
领域:[{
章节:[{
rjf:[{
文本:“样本标题”,
}]
},
{
rjf:[{
键入:“段落”,
深度:0,
text:“此网站由以下人员提供:”,
inlineStyleRanges:[],
InlineEntityAges:[]
},
{
“类型”:“有序列表项”,
“文本”:“订购项目A”,
},
{
“类型”:“无序列表项”,
“文本”:“订购的B项”,
},
{
键入:“段落”,
深度:0,
text:“此网站由以下人员提供:”,
inlineStyleRanges:[],
InlineEntityAges:[]
},
{
“类型”:“有序列表项”,
“文本”:“订购项目A”,
},
{
“类型”:“无序列表项”,
“文本”:“订购的B项”,
}
]
}
]
}]
}]
};
常量moveToNewObject=(数据)=>{
常量节=数据[0]。区域[0]。节;
sections.forEach(数据=>{
let list=data.rjf;
设a=list.map((条目,索引)=>{
返回{…条目,
指数
用法:entry.type!==“无序列表项”&&entry.type!==“有序列表项”
}
}).filter(条目=>entry.use).map((条目、索引、条目)=>{
const end=index log(moveToNewObject(data.data))代码>切片是数组上的方法,而不是对象上的方法。代码中的数据是一个对象
const a ={a:1,b:2,c:3,d:4}
const b =[1,2,3,4]
//console.log(a.slice(1,3)) //this will return the error
console.log(b.slice(1,3))
希望有帮助。您的数据有一个非常奇怪的结构,这使得诚实变得更加困难。下面的代码段使用了一个函数,该函数在所有部分上使用map
,如果rjf
类型是'unordered-list-item'
或'ordered-list-item'
,它会将其移动到list
类型为items
的新rjf
。希望这是你想要的
如果您想要更清晰的代码格式,这里有一把小提琴:
const数据={
数据:[
{
领域:[
{
章节:[
{
rjf:[
{
文本:“样本标题”,
}
]
},
{
rjf:[
{
键入:“段落”,
深度:0,
text:“此网站由以下人员提供:”,
inlineStyleRanges:[],
InlineEntityAges:[]
},
{
“类型”:“有序列表项”,
“文本”:“订购项目A”,
},
{
“类型”:“无序列表项”,
“文本”:“订购的B项”,
}
]
}
]
}
]
}
]
};
常量moveToNewObject=(数据)=>{
常量节=数据[0]。区域[0]。节;//为什么数据是数组?
返回节。映射((节)=>{
如果(第rjf节){
const looseItems=section.rjf.filter((rjf)=>rjf.type&['ordered-list-item','unordered-list-item'],包括(rjf.type));
if(项目长度){
返回{
rjf:[
…第.rjf节,
{
键入:“列表”,
项目:松散项目
}
].filter((rjf)=>rjf.type&!['ordered-list-item'、'unordered-list-item']包括(rjf.type))
}
}
返回段;
}
返回段;
})
}
data.data[0]。区域[0]。节=移动对象(data.data);
console.log(data.data)代码>分组的位置有序列表项
和无序列表项
不被维护。例如,在列表
之后,如果我得到一个段落
,分组应该停止。无法理解,它只将有序列表项
和无序列表项
分组为列表
类型。您的新示例显示结果是翻倍的?不是翻倍的,我可以有多个列表项,我想保持它的位置。我已经用当前和预期的问题更新了这个问题。在您提供的当前解决方案中,所有列表项最后都被分组。如果我理解正确,您希望数组的结构是标题
类型后跟它的内容(即type列表
),是否希望这样的输出?这可能是可行的(使用reduce
而不是map
加上数组分解),但我建议您不要这样做。引入这样的逻辑会使代码很难维护和不可读。数组不是适合这种类型的数据结构,最好使用对象,例如{heading:,contents:
。如果您从后端获得此输入,后端的工作就是以可读格式提供它。