skribe
skribe

Reputation: 3615

Find index of object in javascript by a value

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

Answers (4)

Devanshu
Devanshu

Reputation: 1

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

Upvotes: 0

maerics
maerics

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

Eddie
Eddie

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

gurvinder372
gurvinder372

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

Related Questions