如何通过idAnak获取people数组中对应的父级id
根据idAnak查找对应people的id
给定嵌套结构的people数组,每个people对象包含dataInduk数组,dataInduk的子项又包含dataAnak数组。已知idAnak的值,要找到它所属的people对象的id(比如idAnak='2b2'时返回2),可以用以下两种方式实现:
方法一:使用find+some嵌套调用
利用数组的find和some方法,简洁完成嵌套查找:
function getPeopleIdByAnakId(targetIdAnak) { const matchedPerson = people.find(person => person.dataInduk.some(induk => induk.dataAnak.some(anak => anak.idAnak === targetIdAnak) ) ); return matchedPerson ? matchedPerson.id : null; } // 测试示例 console.log(getPeopleIdByAnakId('2b2')); // 输出:2 console.log(getPeopleIdByAnakId('1a1')); // 输出:1 console.log(getPeopleIdByAnakId('xxx')); // 输出:null(无匹配时)
逻辑说明
people.find()遍历数组,返回第一个符合条件的person对象- 第一层
some()检查当前person的dataInduk中是否有任意一项满足后续条件 - 第二层
some()检查当前induk的dataAnak中是否存在idAnak等于目标值的项 - 找到匹配项就返回对应
person.id,没找到则返回null
方法二:嵌套循环遍历
如果需要更直观的逻辑或者兼容旧环境,用三层嵌套循环实现:
function getPeopleIdByAnakId(targetIdAnak) { for (const person of people) { for (const induk of person.dataInduk) { for (const anak of induk.dataAnak) { if (anak.idAnak === targetIdAnak) { return person.id; } } } } return null; } // 测试 console.log(getPeopleIdByAnakId('2b2')); // 输出:2
逻辑说明
- 依次遍历
people、dataInduk、dataAnak三层数组 - 一旦找到
idAnak匹配的项,立即返回对应的person.id(提前终止遍历,提升效率) - 遍历完所有项仍无匹配时,返回
null
内容的提问来源于stack exchange,提问作者Quinn
相关产品推荐
相关产品推荐

