我有一个包含多个其他对象的对象,在这些嵌套对象内部是一个包含多个对象的数组,每个对象都带有一个uid
。我试图遍历对象,并找到包含特定uid
的对象。
我的数据如下
const data = {
"3c5671fde44f44f9ad59d59eb810d87e": {
"heading": "Heading 1",
"items": [
{
"content": {
"uid": "4fcd5f4af7a448d48463d4e0a11297d9"
}
},
{
"content": {
"uid": "31f975440a0a431592e127b2891cd142"
}
}
]
},
"ea80e8315b554c9bb40958a6cacf4b0c": {
"heading": "Heading 2",
"items": [
{
"content": {
"uid": "d6de8db4c2a74da6915a44d3964277d6"
}
}
]
}
}
发现要返回的uid
是d6de8db4c2a74da6915a44d3964277d6
时,我想返回它的父对象,以便可以访问heading
属性。
当前代码看起来像这样,但是它不起作用,已经过了很长的一天,所以我可能会错过一些非常简单的东西。
const currentUid = "d6de8db4c2a74da6915a44d3964277d6";
const currentHeading = Object.keys(data).forEach(section => {
return data[section].items.filter(item => {
return item.content.uid === currentUid;
});
});
在调试时,如果找到正确的true
,则成功评估为uid
,只是不返回任何内容。
欢迎您的帮助!
答案 0 :(得分:2)
forEach
仅用于循环数组,请使用find
从Object.keys(data)
中查找对象的键。在回调中使用some
而不是filter
来检查是否存在。该解决方案将导致对象的键或null
的键。要获取对象,只需检查是否已返回键,然后使用该键即可获取对象:
const currentHeadingKey = Object.keys(data).find(section => {
return data[section].items.some(item => {
return item.content.uid === currentUid;
});
});
const currentHeading = currentHeadingKey != null ? data[currentHeadingKey] : null;
currentHeading
现在是整个对象(如果找到),否则是null
。您可以访问该对象的heading
属性。
注意:由于find
和some
的回调中都只有一个语句,因此可以使用箭头函数的隐式返回来缩短代码: / p>
const currentHeadingKey = Object.keys(data).find(section =>
data[section].items.some(item => item.content.uid === currentUid)
);
答案 1 :(得分:1)
请考虑改用Object.values()
方法,为提供的uid
提取“父标题”。
采用这种方法,您可以迭代data
的值,并过滤包含匹配section
的{{1}}的{{1}}值。在下面的答案中,这是通过以下方式完成的:
items
最后,您可以uid
过滤后的部分来获取具有匹配return items.some(item => item.content.uid === currentUid)
项的部分的相应标题:
map()