Чтение значений с различными типами данных внутри строки в JavaScript - PullRequest
0 голосов
/ 16 ноября 2018

Предположим, у меня есть строка var str = " 1, 'hello' " Я пытаюсь дать функции вышеуказанные значения, найденные в str, но как целое число и строка, а не как одна строка например myFunc(1,'hello') как я могу этого добиться я пытался использовать eval(str), но я получаю invalid token , Как я могу решить это?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

У вас почти есть правильная идея с eval(str), но это не то, что вы на самом деле хотите оценить.Если вы используете eval(str), это то же самое, что сказать eval(" 1, 'hello' ")

Однако, что вы действительно хотите сделать, это: eval("func(1, 'hello world')).

Для этого вы можете сделать:

eval(func.name + '(' + str.trim() + ')');

Здесь мы имеем:

  • func.name: имя вызываемой функции.Вы можете, конечно, жестко закодировать это.(т.е. просто напишите "func (" + ...)

  • str.trim(): аргументы, которые вы хотите передать в данную функцию. Здесь я также использовал .trim(), чтобы удалить любыедополнительные пробелы вокруг строки.

Взгляните на фрагмент ниже. Здесь я в основном выписал приведенную выше строку кода, однако я использовал некоторые промежуточные переменные, чтобы помочь разобратькак именно это работает:

function func(myNum, myStr) {
  console.log(myNum*2, myStr);
}

let str = " 1, 'hello, world'";


// Build the components for the eval:
let fncName = func.name;
let args = str.trim();
let fncStr = fncName + '(' + args + ')';

eval(fncStr);

В качестве альтернативы , если вы хотите передать только два аргумента, вы можете использовать .split(',') в вашей строке, чтобы разбить строку на основе символа запятой,.

Использование split для " 1, 'hello' " даст вам такой массив a:

let a = [" 1", "'hello'"];

Затем приведите вашу строку кцелое число и удалите дополнительные кавычки вокруг вашей строки, используя .replace(/'/g, ''); (замените все кавычки ' ничем ''):

let numb = +a[0].trim(); // Get the number (convert it to integer using +)

let str = a[1].trim().replace(/'/g, ''); // get the string remove whitespace and ' around it using trim() and replace()

Теперь вы можете вызывать свою функцию, используя следующие две переменные:

func(numb, str);

function func(myNum, myStr) {
  console.log('The number times 2 is:', myNum*2, "My string is:", myStr);
}

let arguments = " 1, 'hello' ";
let arr = arguments.split(',');

let numb = +arr[0].trim(); // Argument 1
let str = arr[1].trim().replace(/'/g, ''); // Argument 2

func(numb, str);
0 голосов
/ 16 ноября 2018

Следующее должно работать с любым количеством аргументов.

function foo(num, str) {
  console.log(num, str);
}

const input = "1, 'hel,lo'";
const args = JSON.parse('[' + input.replace(/'/g, '"') + ']');

foo(...args);
...