Вам нужно использовать его таким образом, чтобы он заработал:
const updatedCoin = Object.assign({}, coin, {position: balance});
Как вы его использовали, вы сначала генерируете объект с оригинальным объектом монеты плюс обновленную позицию.Этого будет достаточно, чтобы получить обновленный объект, как показано в следующем примере:
let coin = {
availableSupply: "17572412",
currency: "BTC",
exchange: "",
exchange_base: "",
marketCap: 67651096742.34,
name: "Bitcoin",
percentage: 100,
position: 1,
price: "3849.84695",
value: 3849.84695
}
console.log({...coin, position: 2});
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
Но позже и, наконец, вы присваиваете все исходные свойства монеты обновленному объекту, возвращая свой начальный объект:
let coin = {
availableSupply: "17572412",
currency: "BTC",
exchange: "",
exchange_base: "",
marketCap: 67651096742.34,
name: "Bitcoin",
percentage: 100,
position: 1,
price: "3849.84695",
value: 3849.84695
}
let updated = {...coin, position: 2};
console.log(Object.assign(updated, coin));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}