Прежде всего, использование Array.map () таким способом работает, но это не совсем правильно.Помните, что .map()
возвращает новый массив, в котором каждый элемент каким-то образом получен из исходного, и не изменяет исходный массив.Так что будет лучше, если вы сделаете что-то вроде следующего:
const authorsName = this.props.authors.map(e => e.name + ' ' + e.surname);
Другой вариант, чтобы код оставался более похожим на тот, который вы даете, - это использовать Array.forEach () следующим образом:
const authorsName = [];
this.props.authors.forEach(e => authorsName.push(e.name + ' ' + e.surname));
Теперь в вашем следующем коде:
s.innerHTML = `window.customConfig.push({
page_type: "article",
article_authors: "${authorsName}"
})`;
массив authorsName
приведен к строке с использованием Array.toString () метод и MDN
говорит следующее об этом:
Для объектов Array метод toString
присоединяет массив, а возвращает одну строку, содержащую каждый элемент массива, разделенный запятыми.JavaScript вызывает метод toString
автоматически , когда массив должен быть представлен в виде текстового значения или когда массив упоминается в конкатенации строк.
Итак, вместо этого вам нужно использовать JSON.stringify () для преобразования массива в JSON
его представление.
s.innerHTML = `window.customConfig.push({
page_type: "article",
article_authors: "${JSON.stringify(authorsName)}"
})`;
Вы можете проверить разницу между использованием toString()
и JSON.stringify()
в следующем примере:
let arr = [1,2,3];
console.log("With toString() =>", arr.toString());
console.log("With JSON.stringify() =>", JSON.stringify(arr));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}