通过值

时间:2018-03-30 13:04:09

标签: javascript json

我在json中有很长的时区列表,如下所示。

[
 {"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"},
]

我设置了用户时区检测,返回时区字符串"America/Los_Angeles"

使用Javascript我想在json对象中找到America/Los_Angeles的位置,这样我就可以使用它的“name”预填充表单字段。

我熟悉indexOf()方法,但在这种情况下无法弄清楚如何使用它。有没有一种简单的方法可以解决这个问题,还是应该只通过整个列表进行处理?

4 个答案:

答案 0 :(得分:1)

  

使用Javascript我想找到America / Los_Angeles所在的位置   json对象,所以我可以使用它的“名称”预填充表单域。

您可以使用findIndex

var index = arr.findIndex( s => s.value == "America/Los_Angeles" )

现在使用此索引预填充字段。

或者只是使用find返回一个对象

var element = arr.find( s => s.value == "America/Los_Angeles" )

并在element本身

中设置名称字段
element.name = "somevalue";

答案 1 :(得分:1)

您可以使用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

答案 2 :(得分:0)

参见builtin Array.prototype.findIndex(),例如:

[{x:1},{x:2},{x:3}].findIndex(o => o.x == 2) // => 1

如果定位一个没有该方法的旧JavaScript解释器,您可以简单地迭代数组并返回匹配的第一个项的索引,如此函数所示:

function findIndexByProperty(array, name, value) {
  for (var i = 0; i < array.length; i++) {
    if (array[i][name] === value) { return i; }
  }
  return -1;
}

答案 3 :(得分:0)

使用JSON.parse将其转换为数组。 然后迭代数组以找到该字段。