我在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()
方法,但在这种情况下无法弄清楚如何使用它。有没有一种简单的方法可以解决这个问题,还是应该只通过整个列表进行处理?
答案 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将其转换为数组。 然后迭代数组以找到该字段。