Reputation: 3615
I have a long list of timezones in json like the following.
[
{"value": "Pacific/Niue", "name": "(GMT-11:00) Niue"},
{"value": "Pacific/Pago_Pago", "name": "(GMT-11:00) Pago Pago"},
{"value": "Pacific/Honolulu", "name": "(GMT-10:00) Hawaii Time"},
{"value": "Pacific/Rarotonga", "name": "(GMT-10:00) Rarotonga"},
{"value": "Pacific/Tahiti", "name": "(GMT-10:00) Tahiti"},
{"value": "Pacific/Marquesas", "name": "(GMT-09:30) Marquesas"},
{"value": "America/Anchorage", "name": "(GMT-09:00) Alaska Time"},
{"value": "Pacific/Gambier", "name": "(GMT-09:00) Gambier"},
{"value": "America/Los_Angeles", "name": "(GMT-08:00) Pacific Time"},
{"value": "America/Tijuana", "name": "(GMT-08:00) Pacific Time - Tijuana"},
{"value": "America/Vancouver", "name": "(GMT-08:00) Pacific Time - Vancouver"},
]
I have user timezone detection set up which returns a timezone string as "America/Los_Angeles"
Using Javascript I want to find the where America/Los_Angeles
is in the json object so I can use its "name" to prefill a form field.
I am familiar with indexOf()
method, but can't work out how to use it in this situation. Is there a simple way to handle this or should I just foreach through the whole list?
Upvotes: 7
Views: 15291
Reputation: 1
use JSON.parse to convert it into an array. and then iterate on the array to find the field.
Upvotes: 0
Reputation: 156434
See the builtin Array.prototype.findIndex()
, e.g.:
[{x:1},{x:2},{x:3}].findIndex(o => o.x == 2) // => 1
If targeting an older JavaScript interpreter which does not have that method you could simply iterate over the array and return the index of the first item that matches as demonstrated in this function:
function findIndexByProperty(array, name, value) {
for (var i = 0; i < array.length; i++) {
if (array[i][name] === value) { return i; }
}
return -1;
}
Upvotes: 0
Reputation: 26844
You can use filter
var arr = [
{"value": "Pacific/Niue", "name": "(GMT-11:00) Niue"},
{"value": "Pacific/Pago_Pago", "name": "(GMT-11:00) Pago Pago"},
{"value": "Pacific/Honolulu", "name": "(GMT-10:00) Hawaii Time"},
{"value": "Pacific/Rarotonga", "name": "(GMT-10:00) Rarotonga"},
{"value": "Pacific/Tahiti", "name": "(GMT-10:00) Tahiti"},
{"value": "Pacific/Marquesas", "name": "(GMT-09:30) Marquesas"},
{"value": "America/Anchorage", "name": "(GMT-09:00) Alaska Time"},
{"value": "Pacific/Gambier", "name": "(GMT-09:00) Gambier"},
{"value": "America/Los_Angeles", "name": "(GMT-08:00) Pacific Time"},
{"value": "America/Tijuana", "name": "(GMT-08:00) Pacific Time - Tijuana"},
{"value": "America/Vancouver", "name": "(GMT-08:00) Pacific Time - Vancouver"},
]
var search = "America/Los_Angeles";
var result = arr.filter(o=>o.value === search);
console.log( result );
Doc: filter
Upvotes: 2
Reputation: 68393
Using Javascript I want to find the where America/Los_Angeles is in the json object so I can use its "name" to prefill a form field.
You can use findIndex
var index = arr.findIndex( s => s.value == "America/Los_Angeles" )
and now use this index to prefill a field.
Or simply use find
to return an object
var element = arr.find( s => s.value == "America/Los_Angeles" )
and set the name field in the element
itself
element.name = "somevalue";
Upvotes: 14