Как зная значение ключа, получить весь объект где содержится это значение?
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"));