eval también se puede usar a veces, y tiene efectos milagrosos

eval, una función que solía evitar, recientemente tengo una nueva sensación al respecto: eval también se puede usar a veces y tiene efectos milagrosos.

Generalmente, cuando se usa js para el desarrollo, no se recomienda usar funciones como eval. En JavaScript, eval puede calcular la cadena entrante y ejecutarla como código js. Debido a que puede ejecutar código js, ​​puede ser utilizado por un tercero para pasar código js malicioso para su ejecución, por lo que esta función tiene un riesgo de seguridad. Además, la velocidad de ejecución de eval es menor que la de los programas js ordinarios, por lo que en el desarrollo diario, sus pautas de uso son "si puede usarlo, no lo use" y "usar eval en el código es algo muy feo". ".

Pero esta vez, al hacer la función de extracción, "tuve que" usarla.

Debido a la pequeña cantidad de datos, la línea de extracción se puede representar en el mapa a través de la representación vectorial, pero los datos de coordenadas y los datos de estilo obtenidos a través del geoservidor están separados y no hay un nombre de estilo para asociar los dos.
Los datos de estilo estipulan que cada conjunto de condiciones de filtro corresponde a un conjunto de valores de estilo (color de segmento de línea, ancho, color de superficie, transparencia).Tome como ejemplo los siguientes datos de estilo:

{
  "Description": {
      "Title": "hidetitle"
  },
  "Filter": {
      "And": {
          "PropertyIsGreaterThanOrEqualTo": {
              "PropertyName": "rsrp_rate",
              "Literal": "0"
          },
          "Not": {
              "PropertyIsNull": {
                  "PropertyName": "eci"
              }
          },
          "PropertyIsEqualTo": {
              "PropertyName": "geo_type",
              "Literal": "cell"
          },
          "PropertyIsLessThanOrEqualTo": {
              "PropertyName": "rk",
              "Literal": "3"
          },
          "PropertyIsLessThan": {
              "PropertyName": "rsrp_rate",
              "Literal": "0"
          }
      }
  },
  "PolygonSymbolizer": {
      "Fill": {
          "SvgParameter": [
              "#f56e3f",
              "0.15"
          ]
      },
      "Stroke": {
          "SvgParameter": [
              "#f56e3f",
              "4"
          ]
      }
  },
  "Name": "cell1-3 and rate 0-20"
},

Su significado es:
cuando (rsrp_rate >= 0 && ect !== null && geo_type === 'cell' && rk <= 3 && rsrp_rate < 0) se cumplan las condiciones, use #f56e3f para el color de relleno de la superficie, 0,15 de transparencia, #f56e3f para el color del segmento de línea y 4 para el ancho.

Si usa el método convencional para calcular y hacer coincidir el valor de los datos de extracción y los datos de estilo, sin duda será muy engorroso y llevará mucho tiempo realizar la detección. Este resultado es sin duda "feo". Pero si usa eval, funcionará de maravilla.

Primero puedo procesar los datos de estilo en algo como

{ operator: '>=', name: 'rsrp_rate', value: 0 }

Tal estructura se almacena en una matriz, y todas las condiciones de filtro de la relación y se almacenan en esta matriz.

Luego obtenga el valor indexValue de cada indicador de los datos de la línea de extracción y ensámblelos de la siguiente manera:

let dataItem = { operator: '>=', name: 'rsrp_rate', value: 0 };
let filterValue = dataItem.value;
let indexValue = lineData[dataItem.name]; // 此处lineData中存储着单个拉线的指标值
eval('filterValue' + dataItem.operator + 'indexValue') ;
// 上方这行代码在编译后执行的是: filterValue >= indexValue

Al usar la característica de que eval puede ejecutar la cadena entrante como una instrucción js, puedo obtener un resultado de juicio condicional y el código es relativamente conciso. El uso de eval hace que el código sea más elegante y mejora en gran medida la coincidencia de datos, la eficiencia y la capacidad de mantenimiento del código.

En resumen, esta experiencia de desarrollo me ha dado una nueva comprensión de eval.

Supongo que te gusta

Origin blog.csdn.net/sinat_40572875/article/details/129758275
Recomendado
Clasificación