7

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?

axiac
  • 68,258
  • 9
  • 99
  • 134
skribe
  • 3,595
  • 4
  • 25
  • 36
  • why `foreach`, there is `filter` – Ivan Mar 30 '18 at 13:05
  • Looks like a job for `filter` method => https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter – Pa Ye Mar 30 '18 at 13:08
  • @Ivan. Thanks, filter is better. Why foreach? Because I work mostly in the backend and am more familiar with foreach and my javascript skills are a bit underdeveloped. – skribe Mar 30 '18 at 13:10

4 Answers4

14

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";
gurvinder372
  • 66,980
  • 10
  • 72
  • 94
2

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

Eddie
  • 26,593
  • 6
  • 36
  • 58
0

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;
}
maerics
  • 151,642
  • 46
  • 269
  • 291
0

use JSON.parse to convert it into an array. and then iterate on the array to find the field.

Devanshu
  • 1
  • 6