在JavaScript中通过值查找对象的索引

7

我有一个长长的时区列表,格式为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所在的位置,以便使用其“名称”填充表单字段。
我熟悉indexOf()方法,但无法在此情况下使用它。是否有简单的方法来处理这个问题,还是应该遍历整个列表?

为什么要使用foreach,而不是使用filter - Ivan
看起来需要使用 filter 方法 => https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/filter - Pavel Ye
@Ivan。谢谢,过滤器更好。为什么使用foreach?因为我主要在后端工作,熟悉foreach,而我的JavaScript技能还不够发达。 - skribe
4个回答

14

使用 Javascript,我想要在 json 对象中找到 America/Los_Angeles 的位置,以便可以使用其“名称”填充表单字段。

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

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

文档: filter


0
请参见内置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;
}

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接