'how to search and retrun value from array
Trying, find and return a value from array using JavaScript- with dynamic inputs
const drawers = [
{
"name": "locations",
"values": [
{
"value": "dana-point-ca",
"label": "Dana Point, CA"
},
{
"value": "bronx-new-york",
"label": "Bronx, New York"
},
{
"value": "new-york-ny",
"label": "New York, NY"
}
]
},
{
"name": "programAreas",
"values": [
{
"value": "coral-conservation",
"label": "CORAL CONSERVATION"
}
]
}
]
Input keys are dynamic, if it is locations and value is bronx-new-york then it should return Bronx, New York;
let lbl = drawers.find(o => o.name === 'string 1').label;
Solution 1:[1]
Use array.find in each values until you find the answer.
const drawers = [
{
"name": "locations",
"values": [
{
"value": "dana-point-ca",
"label": "Dana Point, CA"
},
{
"value": "bronx-new-york",
"label": "Bronx, New York"
},
{
"value": "new-york-ny",
"label": "New York, NY"
}
]
},
{
"name": "programAreas",
"values": [
{
"value": "coral-conservation",
"label": "CORAL CONSERVATION"
}
]
}
]
function getLabel(x) {
for (const nameValues of drawers) {
const values = nameValues.values
const item = values.find(v => v.value === x)
if (item !== undefined) {
return item.label
}
}
}
getLabel("bronx-new-york") // 'Bronx, New York'
getLabel("coral-conservation") // 'CORAL CONSERVATION'
getLabel("Value that does not exist") // undefined
Solution 2:[2]
for(let i = 0 ; i < drawers.length ; i++){
let lbl = drawers[i].values.find(o => o.label === "Bronx, New York").label;
console.log(lbl)
}
Solution 3:[3]
There is a couple of ways to achieve that. As below, you will get all the possible results. However, you might need to deconstruct the arrays in order to get the strings.
const drawers = [
{
"name": "locations",
"values": [
{
"value": "dana-point-ca",
"label": "Dana Point, CA"
},
{
"value": "bronx-new-york",
"label": "Bronx, New York"
},
{
"value": "new-york-ny",
"label": "New York, NY"
}
]
},
{
"name": "programAreas",
"values": [
{
"value": "coral-conservation",
"label": "CORAL CONSERVATION"
}
]
}
]
const enteredValue = "bronx-new-york";
const resultArrays = []
const onSearchLocation = () => {
drawers.find(location => {
const labels = location.values.map((place => {
const array = [];
if(place.value === enteredValue) {
array.push(place.label);
}
if(array.length > 0) {
resultArrays.push(array);
}
}
))
})}
onSearchLocation();
console.log(resultArrays);
Solution 4:[4]
I use find with combination of map.
const d = [
{
"name": "locations",
"values": [
{
"value": "dana-point-ca",
"label": "Dana Point, CA"
},
{
"value": "bronx-new-york",
"label": "Bronx, New York"
},
{
"value": "new-york-ny",
"label": "New York, NY"
}
]
},
{
"name": "programAreas",
"values": [
{
"value": "coral-conservation",
"label": "CORAL CONSERVATION"
}
]
}
]
let r = d.find(el => el.name === 'locations').values
let re = r.map(v => {
if (v.value == 'bronx-new-york') {
return v.label
}
})
result = re.filter(e => e)
console.log(result)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Watanabe.N |
| Solution 2 | dinesh oz |
| Solution 3 | Jabou |
| Solution 4 | Maik Lowrey |
