Я работаю с элементом svg и пытаюсь создать элемент text, динамически извлекая параметр, который передается аргументу функции ранее.
Например, минимальный образец
const data = [{ "Month": 1, "Value": 10000, "MonthName": "Jan" }, { "Month": 2, "Value": 20000, "MonthName": "Feb" }];
const data2 = data.map((x)=>x.Value);
// targeting the svg itself
const svg = document.querySelector("svg");
// variable for the namespace
const svgns = "http://www.w3.org/2000/svg"
const text1 = document.createElementNS(svgns, "text")
text1.setAttribute('x', '10');
text1.setAttribute('y', '10');
text1.textContent = 'Value';
svg.appendChild(text1);<svg class = "layer1" xmlns = "http://www.w3.org/2000/svg" width = "200" height = "200" viewBox = "0 0 200 200">
</svg>В этом случае, есть ли способ, которым я могу javascript вернуть оператор const data2 в виде строки, чтобы я мог динамически генерировать текстовое содержимое, как показано ниже
const data = [{ "Month": 1, "Value": 10000, "MonthName": "Jan" }, { "Month": 2, "Value": 20000, "MonthName": "Feb" }];
const data2 = data.map((x)=>x.Value);
// targeting the svg itself
const svg = document.querySelector("svg");
// variable for the namespace
const svgns = "http://www.w3.org/2000/svg"
const text1 = document.createElementNS(svgns, "text")
text1.setAttribute('x', '10');
text1.setAttribute('y', '10');
text1.textContent = `data.map((x)=>x.Value)`.match(/(?<=x\.)[a-zA-Z]+/gm);
svg.appendChild(text1);<svg class = "layer1" xmlns = "http://www.w3.org/2000/svg" width = "200" height = "200" viewBox = "0 0 200 200">
</svg>Поэтому вместо жесткого кодирования
text1.textContent = 'Value';
Я хочу написать следующее, поскольку const data2 будет меняться. Например, это может быть x.Month/x.MonthName.
text1.textContent = {a function that returns const data2 expression as string}`data.map((x)=>x.Value)`.match(/(?<=x\.)[a-zA-Z]+/gm);
Чтобы упростить, если я напишу const x =[1,2].length, есть ли способ в js, которым я могу вернуть [1,2].length в виде строки? x.toString(); возвращает 2, но я хочу, чтобы x.someFunc возвращал [1,2].length вместо 2.
Не думайте, что это возможно. Этот помогает, но, как вы сказали, не дает желаемого результата.
Как каждый, это звучит как х/у проблема, нужно объяснить, «почему» вы хотите это сделать?
Я уже объяснил выше с вариантом использования svg.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Нет, невозможно получить выражение, которое использовалось при объявлении переменной, в виде строки.
Вы должны решить это с уровнем косвенности. Поместите свойство в строковую переменную и используйте ее при вычислении data2, а также для textContent.
const data2_prop = 'Value';
const data2 = data.map((x) => x[data2_prop]);
...
text1.textContent = data2_prop;
Трудно понять ваш вопрос, вы можете перебрать массив и выполнить любые желаемые действия с текущим объектом?