Как зная значение ключа, получить весь объект где содержится это значение?

const arr = [{
    name: "Name",
    region: [
        {name: "Name1", cities:[
            {name:"Name11", l:1},
            {name:"Name12", l:2},
            {name:"Name13", l:3}
        ]},
        {name: "Name2", cities:[
            {name:"Name21", l:4},
            {name:"Name22", l:5},
            {name:"Name23", l:6}
        ]},
        {name: "Name3", cities:[
            {name:"Name31", l:7},
            {name:"Name32", l:8},
            {name:"Name33", l:9}
        ]}                  
]
}]

к примеру у меня есть значение Name22, как из массива получить объект в котором содержится это значение ({name:"Name22", l:5})?


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

Автор решения: Павел Ериков

Самое простое что приходит в голову, так это просто пробежаться по всему arr. Вот пример функции:

const arr = [{
    name: "Name",
    region: [
        {name: "Name1", cities:[
            {name:"Name11", l:1},
            {name:"Name12", l:2},
            {name:"Name13", l:3}
        ]},
        {name: "Name2", cities:[
            {name:"Name21", l:4},
            {name:"Name22", l:5},
            {name:"Name23", l:6}
        ]},
        {name: "Name3", cities:[
            {name:"Name31", l:7},
            {name:"Name32", l:8},
            {name:"Name33", l:9}
        ]}                  
]
}];

function findParentObject(arr, val){
    let data = arr[0]['region'];
    //Проходимся по Name*
    for(let i = 0; i < data.length; i++){
        let node = data[i].cities;
        //Проходимся по Name**
        for(let j = 0; j < node.length; j++){
            //Сравниваем Name**.name
            if(node[j].name === val)
              //Возвращаем родительский Name**
                return node[j];
        }
    }
    return undefined;
}

console.log(findParentObject(arr, "Name22"));

→ Ссылка
Автор решения: Color kat

Вот. Просто перебираете массив и сравниваете значение в массиве с вашим.

const arr = [{
  name: "Name",
  region: [{
      name: "Name1",
      cities: [{
          name: "Name11",
          l: 1
        },
        {
          name: "Name12",
          l: 2
        },
        {
          name: "Name13",
          l: 3
        }
      ]
    },
    {
      name: "Name2",
      cities: [{
          name: "Name21",
          l: 4
        },
        {
          name: "Name22",
          l: 5
        },
        {
          name: "Name23",
          l: 6
        }
      ]
    },
    {
      name: "Name3",
      cities: [{
          name: "Name31",
          l: 7
        },
        {
          name: "Name32",
          l: 8
        },
        {
          name: "Name33",
          l: 9
        }
      ]
    }
  ]
}]

function getObjByValue(obj, value) {
  let data = arr[0].region, result;
  data.map(x => {
    let array = Object.values(x.cities);
    for (let i = 0; i < array.length; i++) {
      if (array[i].name == value) {
        result = array[i];
        break;
      }
    }
  });
  
  return result;
}

console.log(getObjByValue(arr, "Name22"));

→ Ссылка