大佬教程收集整理的这篇文章主要介绍了从数组和对象的深度嵌套对象中返回所有 id,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有这个深度嵌套的对象
let obj = {
comp: "el",type: "ele",children: [
{
children: [
{
text: "text",children: [],uID: "-5zIANJjCz-qU0MNcf5E1",},{
text:"text",uID: "bpeVj4NaD_Io3WP7V0v91"
}
],uID: "ZygtUliVsFbFpbmHv5yp9"
},{
children: [
{
text: "text",uID: "qmw59v1BVRMEuM8r9VvQp",{
text: "text. ",uID: "q-QeWlEnKvVTjD0dPRXCu"
}
],uID: "rp_gURLfigd1n7bn-pRhn"
},uID: "8gIytZ52tq0mqiVAhAJLN",{
text: "text",uID: "q-QeeWlEnKvVTjD0dPRXCu"
}
],uID: "M3hqA-Rp1wQz60IVdIGUX"
}
],uID: "M4JBL9SoOolo5iQSb5M_P"
};
我将如何获取所有 uID 值的数组?
目前我正在使用对象扫描
https://github.com/blackflux/object-scan
const find = (data,needlE) => objectScan([needle],{ rtn: "value" })(data);
const allIDs = find(obj,"**.uID");
这非常有效,但我很好奇如何通过递归实现这一点。
使用一个简单的辅助函数来收集结果与使用它来获取每个访问过的节点的 id 的结果配对非常容易::
const gather = (fn) => (o) =>
[fn (o),... (o .children || []) .flatMap (gather (fn))]
const obj = {Comp: "el",type: "ele",children: [{Children: [{text: "text",children: [],uid: "-5zIANJjCz-qU0MNcf5E1"},{text: "text",uid: "bpeVj4NaD_Io3WP7V0v91"}],uid: "ZygtUliVsFbFpbmHv5yp9"},{Children: [{text: "text",uid: "qmw59v1BVRMEuM8r9VvQp"},{text: "text. ",uid: "q-QeWlEnKvVTjD0dPRXCu"}],uid: "rp_gURLFIgd1n7bn-pRhn"},uid: "8gIytZ52tq0mqiVAhAJLN"},uid: "q-QeeWlEnKvVTjD0dPRXCu"}],uid: "M3hqA-Rp1wQz60IVdIGUX"}],uid: "M4JBL9SoOOLo5iQSb5M_P"}
console .log (gather (x => x .uid) (obj))
// or,storing the uid function in a Helper:
// const extractUids = gather (x => x .uid)
// console .log (extractUids (obj))
但是如果您对通用解决方案没有其他需求,您也可以将该助手直接内联到函数中:
const extractUids = (o) =>
[o .uid,... (o .children || []) .flatMap (extractUids)]
,
对于树(和没有环的图),您可以使用简单的基于递归的策略,如下所示:
function reduCETree<Item,Acc>(
next: (item: Item) => Item[],reducer: (acc: Acc,item: Item) => Acc
) {
const step = (acc: Acc,item: Item): Acc => next(item)
.reduce((_,child) => step(_,child),reducer(acc,item));
return step;
}
// Test
const allIds = reduCETree(
(item: TreeItem) => item.children,(allIds: String[],item) => [...allIds,item.uid]
)(
[],obj
);
TS Playground
,您可以使用递归生成器函数:
function* get_uid(d){
yield* ('uid' in d ? [d.uid] : [])
for (var c of ('children' in d ? d.children : [])){
yield* get_uid(C)
}
}
let obj = {'comp': 'el','type': 'ele','children': [{'children': [{'text': 'text','children': [],'uid': '-5zIANJjCz-qU0MNcf5E1'},{'text': 'text','uid': 'bpeVj4NaD_Io3WP7V0v91'}],'uid': 'ZygtUliVsFbFpbmHv5yp9'},{'children': [{'text': 'text','uid': 'qmw59v1BVRMEuM8r9VvQp'},{'text': 'text. ','uid': 'q-QeWlEnKvVTjD0dPRXCu'}],'uid': 'rp_gURLFIgd1n7bn-pRhn'},'uid': '8gIytZ52tq0mqiVAhAJLN'},'uid': 'q-QeeWlEnKvVTjD0dPRXCu'}],'uid': 'M3hqA-Rp1wQz60IVdIGUX'}],'uid': 'M4JBL9SoOOLo5iQSb5M_P'}
var result = [...get_uid(obj)]
console.log(result);
以上是大佬教程为你收集整理的从数组和对象的深度嵌套对象中返回所有 id全部内容,希望文章能够帮你解决从数组和对象的深度嵌套对象中返回所有 id所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。