我有两个对象,其结构如下:
const pageContent =
[
{
header: 'title 1',
subHeader: [ 'subtitle 1']
},
{
header: 'title 2',
subHeader: [ ]
},
{
header: 'title 3',
subHeader: [ 'subtitle 2', 'subtitle 3', 'subtitle 4' ]
}
]
const subPageContent =
[
{
masterHeader: ' ', // === header: 'title 1'
header: [ 'subtitle 1' ]
},
{
masterHeader: ' ', // === header: 'title 3'
header: [ 'subtitle 2' ]
},
{
masterHeader: ' ', // === header: 'title 3'
header: [ 'subtitle 3' ]
},
{
masterHeader: ' ', // === header: 'title 3'
header: [ 'subtitle 4' ]
}
]
EDIT-NOTE:subPageContent对象定义错误。
目前,这两个对象是分开的,但将在下一步中连接起来。但是,我需要subPageContent的每个"header"都有相应的"masterHeader",它可以在pageContent中作为"header"找到
所以我有:
function search(searchTerm, array){
for ( let i = 0; i < array.length; i++) {
if ( array[i].subHeader[i] === searchTerm ) {
return array[i].header
}
}
}
let searchTerm = 'subtitle 1'
let resultObject = search(searchTerm, pageContent)
如果我在pageContent的subHeader数组中只有一个值,这很好。
我很难对一个有多个值的数组进行迭代。我想我会做第二个for循环,然后返回相应的标题:
function searchTwo(searchTerm, array) {
for ( let i = 0; i < array.length; i++) {
for ( let j = 0; j < array[j].length; j++) {
if ( array[j].subHeader[j] === searchTerm ) {
return array[j].header
}
}
}
}
有人知道吗,我如何在对象中的数组上循环?一旦我找到了那个对象,就在subPageContent中将标题设置为masterHeader值?
下一步是构建一个forEach循环,这样它将为subPageContent对象中的每个元素搜索丢失的masterHeader。
正如评论中提到的@pilchard,您可以将Array.find
与Array.includes
结合使用来实现search
函数,其中subHeader
属性是一个数组。然后,您可以将此函数与forEach
结合使用,以使用masterHeader
值更新subPageContent
阵列:
const pageContent =
[
{ header: 'title 1', subHeader: [ 'subtitle 1'] },
{ header: 'title 2', subHeader: [ ] },
{ header: 'title 3', subHeader: [ 'subtitle 2', 'subtitle 3', 'subtitle 4' ] }
]
const subPageContent =
[
{ masterHeader: ' ', header: [ 'subtitle 1' ] },
{ masterHeader: ' ', header: [ 'subtitle 2' ] },
{ masterHeader: ' ', header: [ 'subtitle 3' ] },
{ masterHeader: ' ', header: [ 'subtitle 4' ] }
]
function search(searchTerm, array) {
return array.find(({ subHeader }) => subHeader.includes(searchTerm))?.header
}
subPageContent.forEach(o => o.masterHeader = search(o.header[0], pageContent) || o.masterHeader)
console.log(subPageContent)
请注意,我们在更新程序中使用|| o.masterHeader
,这样,如果在任何subHeader
数组中都找不到header
值(在这种情况下,search
将返回undefined
(,则masterHeader
的值将保持原样。