First of all, the usage of Array.map() that way works, but it is not quite correct. Remember that .map() returns a new array where each element is derived in some way from the original one, and do not mutates the original array. So, it will be better if you do something like next:
const authorsName = this.props.authors.map(e => e.name + ' ' + e.surname);
The other option, to keep the code more similar to the one you give, is to use Array.forEach() in this way:
const authorsName = [];
this.props.authors.forEach(e => authorsName.push(e.name + ' ' + e.surname));
Now, on your next code:
s.innerHTML = `window.customConfig.push({
page_type: "article",
article_authors: "${authorsName}"
})`;
the authorsName array is coerced to a string using the Array.toString() method and the MDN says next about it:
For Array objects, the toString method joins the array and returns one string containing each array element separated by commas. JavaScript calls the toString method automatically when an array is to be represented as a text value or when an array is referred to in a string concatenation.
So, instead you need to use JSON.stringify() to convert the array into a JSON representation of it.
s.innerHTML = `window.customConfig.push({
page_type: "article",
article_authors: "${JSON.stringify(authorsName)}"
})`;
You can check the difference between using toString() and JSON.stringify() on the next example:
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;}
article_authors: ${JSON.stringify(authorsName)}, though, why build out the script.