如何将变量与没有索引但具有不同数组键的数组匹配

问题描述

我正在尝试将变量值与纯 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","96.2","35.5",....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
}

有什么方法可以减少对数据数组索引的依赖,并使其在字段数组上可靠吗?

解决方法

类似的东西?

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','96.2','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
    }
  // ...
  }