Как найти нужное свойство с нужным значением?

У меня есть объект:

const obj = [{
  tag: "div",
  props: {
    id: "div1"
  },
  children: [{
    tag: "div",
    props: {
      id: "div2"
    },
    children: []
  }, {
    tag: "div",
    props: {
      id: "div3"
    },
    children: []
  }]
}, {
  tag: "div",
  props: {
    id: "div4"
  },
  children: []
}];

Мне нужно написать функцию, которая принимает 2 аргумента. Первый аргумент это объект для поиска, а второй аргумент это id. Возвращается объект с нужным id.

Примеры:

  1. searchElement(obj, "div2") -> {tag: "div", props: {id: "div2"}, children: []}
  2. searchElement(obj, "div4") -> {tag: "div", props: {id: "div4"}, children: []

Заранее спасибо!


Ответы (1 шт):

Автор решения: ksa

У меня есть объект

Это все же массив...

Как найти нужное свойство с нужным значением?

Предложу такой вариант решения этой задачки...

const searchElement = (arr, id) => {
  for (const o of arr) {
    if (o.props.id === id) return o
    const obj = searchElement(o.children, id)
    if (obj) return obj
  }
  return null
}
const arr = [
  {
    tag: "div",
    props: {
      id: "div1"
    },
    children: [
      {
        tag: "div",
        props: {
          id: "div2"
        },
        children: []
      }, 
      {
        tag: "div",
        props: {
          id: "div3"
        },
        children: []
      }
    ]
  }, 
  {
    tag: "div",
    props: {
      id: "div4"
    },
    children: []
  }
];
console.log(searchElement(arr, "div2"))
//{tag: "div", props: {id: "div2"}, children: []}
console.log(searchElement(arr, "div4"))
//{tag: "div", props: {id: "div4"}, children: []

→ Ссылка