Строковый массив без двойных кавычек в JavaScript - PullRequest
0 голосов
/ 01 ноября 2019

Я хочу преобразовать строковый массив в другой массив без кавычек в javascript

[
  "L.latLng(30.709455,76.688576)",
  "L.latLng(30.709461,76.68856)",
  "L.latLng(30.709461,76.68856)",
  "L.latLng(30.70947,76.6886)",
  "L.latLng(30.709461,76.68856)"
];

Ожидаемый результат:

[
  L.latLng(30.709455, 76.688576),
  L.latLng(30.709461, 76.68856),
  L.latLng(30.709461, 76.68856),
  L.latLng(30.70947, 76.6886),
  L.latLng(30.709461, 76.68856)
];

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Существует несколько подходов к этой проблеме.

Опасно небезопасный eval путь:

Этот подход напрямую вызывает eval, он выполняет любой переданный код JavaScript и, следовательно, имеетмножество проблем с безопасностью, связанных с этим.

const newArray = stringArray.map(eval);

eval с белым списком

Один из способов сделать вызов на eval более безопасным - это использовать белый списокразрешенные шаблоны, это гарантирует, что код не получит доступ к каким-либо переменным за пределами предполагаемой области видимости.

const L = {};
L.latLng = (lat, lng) => ({ lat, lng })

const stringArray = [
    "L.latLng(30.709455,76.688576)",
    "L.latLng(30.709461,76.68856)",
    "L.latLng(30.709461,76.68856)",
    "L.latLng(30.70947,76.6886)",
    "L.latLng(30.709461,76.68856)"
];

const newArray = stringArray.map((line) => {
    if(/L\.latLng\(-?[0-9]+(?:\.[0-9]+),-?[0-9]+(?:\.[0-9]+)\)/.test(line)) {
        return eval(line);
    }
    throw new Error('Invalid string specified: ' + line);
});

console.log(newArray);

Настраиваемый анализатор на строку

Имея настраиваемый анализатор на строку, вы предотвращаете выполнение любого нежелательного кода, поскольку могут выполняться только методы сохранения.

Это шаг вперед от exec с регистром белого списка, так как нужно захватить только определенные части строки

const L = {};
L.latLng = (lat, lng) => ({ lat, lng })

const stringArray = [
    "L.latLng(30.709455,76.688576)",
    "L.latLng(30.709461,76.68856)",
    "L.latLng(30.709461,76.68856)",
    "L.latLng(30.70947,76.6886)",
    "L.latLng(30.709461,76.68856)"
];

const newArray = stringArray.map((line) => {
    const match = /^L\.latLng\((-?[0-9]+(?:\.[0-9]+)),(-?[0-9]+(?:\.[0-9]+))\)$/.exec(line)
    if(match !== null) {
        return L.latLng(parseFloat(match[1]), parseFloat(match[2]));
    }
    throw new Error('Invalid string specified: ' + line);
});

console.log(newArray);
1 голос
/ 01 ноября 2019
var data =["L.latLng(30.709455,76.688576)", "L.latLng(30.709461,76.68856)", "L.latLng(30.709461,76.68856)", "L.latLng(30.70947,76.6886)", "L.latLng(30.709461,76.68856)"]

var model = JSON.stringify(data);

var removeString = model.replace(/"/g,'');

ВЫХОД: -

[L.latLng(30.709455,76.688576),L.latLng(30.709461,76.68856),L.latLng(30.709461,76.68856),L.latLng(30.70947,76.6886),L.latLng(30.709461,76.68856)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...