在编程中,从父对象中检索特定子对象是一个常见的操作。这通常涉及以下几种数据结构:
// 假设有一个父对象
const parentObject = {
id: 'parent123',
children: {
child1: { id: 'child1', name: 'Alice' },
child2: { id: 'child2', name: 'Bob' }
}
};
// 已知子对象ID为'child1'
const child = parentObject.children.child1;
console.log(child); // 输出: { id: 'child1', name: 'Alice' }
const parentObject = {
id: 'parent123',
children: [
{ id: 'child1', name: 'Alice' },
{ id: 'child2', name: 'Bob' }
]
};
function findChildById(parent, childId) {
return parent.children.find(child => child.id === childId);
}
const child = findChildById(parentObject, 'child2');
console.log(child); // 输出: { id: 'child2', name: 'Bob' }
function findChildRecursive(obj, targetId) {
if (obj.id === targetId) return obj;
if (obj.children && Array.isArray(obj.children)) {
for (const child of obj.children) {
const found = findChildRecursive(child, targetId);
if (found) return found;
}
}
return null;
}
const deepParent = {
id: 'root',
children: [
{
id: 'level1',
children: [
{ id: 'targetChild', name: 'Target' },
{ id: 'otherChild', name: 'Other' }
]
}
]
};
const target = findChildRecursive(deepParent, 'targetChild');
console.log(target); // 输出: { id: 'targetChild', name: 'Target' }
parent = {
'id': 'parent123',
'children': [
{'id': 'child1', 'name': 'Alice'},
{'id': 'child2', 'name': 'Bob'}
]
}
# 方法1: 列表推导式
child = next((c for c in parent['children'] if c['id'] == 'child2'), None)
print(child) # 输出: {'id': 'child2', 'name': 'Bob'}
# 方法2: filter函数
child = list(filter(lambda x: x['id'] == 'child1', parent['children']))[0]
print(child) # 输出: {'id': 'child1', 'name': 'Alice'}
import java.util.List;
import java.util.stream.Collectors;
class Child {
String id;
String name;
// getters and setters
}
class Parent {
String id;
List<Child> children;
// getters and setters
}
public Child findChildById(Parent parent, String childId) {
return parent.getChildren().stream()
.filter(child -> child.getId().equals(childId))
.findFirst()
.orElse(null);
}
问题1:找不到子对象
问题2:性能问题
问题3:多层嵌套结构
选择哪种方法取决于你的具体需求、数据结构特点以及性能要求。
没有搜到相关的文章