本文介绍了在对象中查找对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我目前正在尝试访问一个对象及其属性,但我似乎无法找到一种方法来获取不是其各自子数组中第一个项目的对象.只有当它们在数组中的第一个时它才能找到数字,但我认为我在我的函数中做错了事情,我不太确定如何修复它.我的错误可能是什么,我该如何解决?
这是树:
{名称:一个",id:{编号:1,等级:0},孩子们: [{name: "两个",id:{编号:2,1级},孩子们: [{名称:三",id:{编号:3,等级:2},孩子们: [{name: 五",id:{编号:5,等级:3},孩子们: [{name: 《八》,id:{编号:8,等级:4},孩子们: []},{name: "九",id:{编号:9,等级:4},孩子们: []},{name: 十",id:{编号:10,等级:4},孩子们: []}]}]},{name: 四",id:{编号:4,等级:2},孩子们: [{名称:六",id:{编号:6,等级:3},孩子们: []},{name: 《七》,id:{编号:7,等级:3},孩子们: []}]}]}]}这是我的功能:
findObj(obj, id) {如果(obj.ids.id == id){返回对象;}否则如果(obj.children.length != 0){for(var i in obj.children) {var temp = findObj(obj.children[i], id);如果(温度!= 未定义){返回温度;}}}} 解决方案您可以使用带有单个 forEach 循环的递归方法来做到这一点.
const data = {"name":"One","ids":{"id":1,"level":0},"children":[{"name":"Two","ids":{"id":2,"level":1},"children":[{"name":"Three","ids":{"id":3,"level":2},"children":[{"name":"Five","ids":{"id":5,"level":3},"children":[{"name":"Eight","ids":{"id":8,"level":4},"children":[]},{"name":"Nine","ids":{"id":9,"level":4},"children":[]},{"name":"Ten","ids":{"id":10,"level":4},"children":[]}]}]},{"name":"四","ids":{"id":4,"level":2},"children":[{"name":"六","ids":{"id":6,"level":3},"children":[]},{"name":"Seven","ids":{"id":7,"level":3},"儿童":[]}]}]}]}函数 findObj(obj, id) {让结果=空;如果(obj.ids.id === id)结果= obj;如果(obj.children){obj.children.forEach(c => {if (!result) result = findObj(c, id)})}返回结果;}控制台日志(findObj(数据,6))控制台日志(findObj(数据,5))console.log(findObj(data, 1))I am currently trying to access an object and its properties but I can't seem to find a way to get objects that are not the first items in their respective children array. It can find numbers only if they're first in the array, but I think that I did the wrong thing in my function, and I am not quite sure how to fix it. What could be my mistakes and how do I fix this?
Here is the tree:
{ name: "One", ids: { id: 1, level: 0 }, children: [ { name: "Two", ids: { id: 2, level: 1 }, children: [ { name: "Three", ids: { id: 3, level: 2 }, children: [ { name: "Five", ids: { id: 5, level: 3 }, children: [ { name: "Eight", ids: { id: 8, level: 4 }, children: [] }, { name: "Nine", ids: { id: 9, level: 4 }, children: [] }, { name: "Ten", ids: { id: 10, level: 4 }, children: [] } ] } ] }, { name: "Four", ids: { id: 4, level: 2 }, children: [ { name: "Six", ids: { id: 6, level: 3 }, children: [] }, { name: "Seven", ids: { id: 7, level: 3 }, children: [] } ] } ] } ] }And here is my function:
findObj(obj, id) { if(obj.ids.id == id) { return obj; } else if(obj.children.length != 0) { for(var i in obj.children) { var temp = findObj(obj.children[i], id); if(temp != undefined) { return temp; } } } }解决方案
You can do this using recursive approach with a single forEach loop.
const data = {"name":"One","ids":{"id":1,"level":0},"children":[{"name":"Two","ids":{"id":2,"level":1},"children":[{"name":"Three","ids":{"id":3,"level":2},"children":[{"name":"Five","ids":{"id":5,"level":3},"children":[{"name":"Eight","ids":{"id":8,"level":4},"children":[]},{"name":"Nine","ids":{"id":9,"level":4},"children":[]},{"name":"Ten","ids":{"id":10,"level":4},"children":[]}]}]},{"name":"Four","ids":{"id":4,"level":2},"children":[{"name":"Six","ids":{"id":6,"level":3},"children":[]},{"name":"Seven","ids":{"id":7,"level":3},"children":[]}]}]}]} function findObj(obj, id) { let result = null; if (obj.ids.id === id) result = obj; if (obj.children) { obj.children.forEach(c => { if (!result) result = findObj(c, id) }) } return result; } console.log(findObj(data, 6)) console.log(findObj(data, 5)) console.log(findObj(data, 1))
更多推荐
在对象中查找对象
发布评论