【问题标题】:how to get value from array of object on basis of other parameter?如何根据其他参数从对象数组中获取值?
【发布时间】:2021-01-21 13:18:11
【问题描述】:

考虑下面的数组有对象并且那个对象也有数组。我正在寻找的是,如果我将“澳大利亚/墨尔本”传递给下面的数组,则输出应该是“澳大利亚东部标准时间”,即第二个对象的值元素(因为第二个对象在“utc”中包含值“澳大利亚东部标准时间”数组。)

注意我试过var winTimeZone = arr.find(tz => tz.utc && tz.utc.includes('Australia/Melbourne));

Servicenow 平台不支持 find 方法。请分享任何其他解决方案。谢谢

var arr =[
    {
        "isdst": false,
        "offset": "09:30:00",
        "text": "(UTC+09:30) Darwin",
        "utc": [
            "Australia/North",
            "Australia/Darwin"
        ],
        "value": "AUS Central Standard Time"
    },

    {
        "isdst": true,
        "offset": "10:00:00",
        "text": "(UTC+10:00) Canberra, Melbourne, Sydney",
        "utc": [
            "Australia/Sydney",
            "Australia/Melbourne",
            "Australia/Hobart",
            "Australia/Victoria",
            "Australia/ACT",
            "Australia/Canberra",
            "Australia/NSW",
            "Australia/Tasmania",
            "Australia/Currie"
        ],
        "value": "AUS Eastern Standard Time"
    }]

【问题讨论】:

  • 如果平台不支持find,则使用简单的循环,如find polyfill on MDN中所示。
  • 感谢您的快速回复,您能否在此处发布一些与我的场景相关的代码

标签: javascript arrays servicenow


【解决方案1】:

无论如何,我认为您的代码无法正常工作。这是我第一次听说平台团队不允许 JavaScript 的这种基本特性。我最好的建议是换公司。

试试这个:

var arr =[
    {
        "isdst": false,
        "offset": "09:30:00",
        "text": "(UTC+09:30) Darwin",
        "utc": [
            "Australia/North",
            "Australia/Darwin"
        ],
        "value": "AUS Central Standard Time"
    },

    {
        "isdst": true,
        "offset": "10:00:00",
        "text": "(UTC+10:00) Canberra, Melbourne, Sydney",
        "utc": [
            "Australia/Sydney",
            "Australia/Melbourne",
            "Australia/Hobart",
            "Australia/Victoria",
            "Australia/ACT",
            "Australia/Canberra",
            "Australia/NSW",
            "Australia/Tasmania",
            "Australia/Currie"
        ],
        "value": "AUS Eastern Standard Time"
    }]
    
    const utcValueForCity = (utcCity) => 
      arr.reduce((acum, current)=>
        acum || (current.utc.includes(utcCity)?current.value:undefined)
    , undefined)
    
    console.log(utcValueForCity("Australia/Melbourne"))

【讨论】:

  • @Avinash 您能否检查这是否是正确答案,以便其他人可以从您的问题中学习?帮助社区...
【解决方案2】:

此代码使用几乎肯定会支持的旧语法:

var arr = [
  {
    "isdst": false,
    "offset": "09:30:00",
    "text": "(UTC+09:30) Darwin",
    "utc": [
      "Australia/North",
      "Australia/Darwin"
    ],
    "value": "AUS Central Standard Time"
  },
  {
    "isdst": true,
    "offset": "10:00:00",
    "text": "(UTC+10:00) Canberra, Melbourne, Sydney",
    "utc": [
      "Australia/Sydney",
      "Australia/Melbourne",
      "Australia/Hobart",
      "Australia/Victoria",
      "Australia/ACT",
      "Australia/Canberra",
      "Australia/NSW",
      "Australia/Tasmania",
      "Australia/Currie"
    ],
    "value": "AUS Eastern Standard Time"
  }
];

var winTimeZone;
for (var dataInd = 0; dataInd < arr.length; dataInd++) {
  var tz = arr[dataInd];
  for (var locationsInd = 0; locationsInd < tz.utc.length; locationsInd++) {
    if (tz.utc.indexOf("Australia/Melbourne") > -1) {
      winTimeZone = tz.value;
    }
  }
}
console.log("winTimeZone: " + winTimeZone);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 2020-12-14
    • 1970-01-01
    • 2021-08-17
    • 2018-04-15
    • 2023-02-23
    • 2021-03-21
    • 2019-08-12
    相关资源
    最近更新 更多