【问题标题】:How to match a variable to an array without index but with keys of different array如何将变量与没有索引但具有不同数组键的数组匹配
【发布时间】:2021-09-27 00:45:17
【问题描述】:

我正在尝试将变量值与纯 JavaScript 中的 API 响应进行匹配。为了匹配,我从响应中获取了静态索引,但稍后可能会出现索引更改的情况。所以我有另一个存储确切位置的字段数组。

有没有办法使用这个数组来匹配变量值? 这是两个数组的响应,一个是字段键,另一个是数据数组。

 "fields":[
      "date",
      "energy",
      "impact-e",
      "lat",
      "lat-dir",
      "lon",
      "lon-dir",
      "alt",
      "vel"
   ],
   "data":[
      [
         "2018-12-18 23:48:20",
         "3133",
         "49",
         "56.9",
         "N",
         "172.4",
         "E",
         "26.0",
         "13.6"
      ],
      [
         "2020-12-22 23:23:33",
         "489.8",
         "9.5",
         "31.9",
         "N",
         "96.2",
         "E",
         "35.5",
         "13.6"
      ],
      ....many more
]

我试图用来匹配数据的条件是:

 if (
      response[i][4] === latDir &&
      response[i][6] === longDir &&
      Number(response[i][3]) >= latMinVal &&
      Number(response[i][3]) <= latMaxVal &&
      Number(response[i][5]) >= longMinVal &&
      Number(response[i][5]) <= longMaxVal
    ) {
  // DO SOMETHING
}

有没有办法减少对数据数组索引的依赖,使其对字段数组可靠?

【问题讨论】:

  • 因为你的数据数组只有值没有键,你必须使用索引。更好的方法是修改 api(如果它是你的)以发送键和值。那么您可以以更有效的方式映射数据。
  • 所以去查找lat-dir 在您的fields 数组中的索引位置 - 然后您就知道使用什么索引来访问数据数组中的相应项目。其他字段也一样。

标签: javascript arrays key-pair


【解决方案1】:

类似的东西?

const infos = 
  { fields: 
    [ 'date', 'energy', 'impact-e', 'lat', 'lat-dir', 'lon', 'lon-dir', 'alt', 'vel'] 
  , data: 
    [ [ '2018-12-18 23:48:20', '3133',  '49', '56.9',  'N', '172.4', 'E', '26.0', '13.6'] 
    , [ '2020-12-22 23:23:33', '489.8', '9.5', '31.9', 'N', '96.2', 'E', '35.5', '13.6'] 
    ] 
  // , ...
  } 

const kp = infos.fields.reduce((keysPairs,c,i)=>{keysPairs[c]=i; return keysPairs},{})
/*
kp = 
  { 'date'     : 0
  , 'energy'   : 1
  , 'impact-e' : 2
  , 'lat'      : 3
  , 'lat-dir'  : 4
  , 'lon'      : 5
  , 'lon-dir'  : 6
  , 'alt'      : 7
  , 'vel'      : 8
  } 
*/

for (let response of infos.data)
  {
  if ( response[kp['lat-dir']]    === latDir 
    && response[kp['lon-dir']]    === longDir 
    && Number(response[kp['lat']]) >= latMinVal 
    && Number(response[kp['lat']]) <= latMaxVal 
    && Number(response[kp['lon']]) >= longMinVal 
    && Number(response[kp['lon']]) <= longMaxVal
    ) {
    // do something
    }
  // ...
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 2013-03-07
    • 2019-05-31
    • 1970-01-01
    相关资源
    最近更新 更多