When you use the g flag for your regex, it returns an array of matches, so you can get the first match by using [0]. For assigning one key, you don't need Object.assign:
const arr = ["1 apple", "2 watermelon"];
const object = {};
arr.forEach(a => {
let value = a.match(/\d+/g)[0];
let key = a.match(/\D+/g)[0];
object[key] = value;
});
This still has the issue of the leading space being in the string, so you could say value = a.match(/\D+/g)[0].substr(1);, or if you're guaranteed to have the words separated by a space you could just split on space:
const arr = ["1 apple", "2 watermelon"];
const object = {};
arr.forEach(a => {
const [value, ...keys] = a.split(" ");
object[keys.join(" ")] = value;
});