在一个对象中查找值,并在另一个对象|javascript中设置值



我有两个对象,其结构如下:

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.findArray.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的值将保持原样。

最新更新