どうやっても泥臭くなるな
もっとeach処理使えば切り詰められる気もするけどこんな感じでいけんじゃないの

const itemNumbers = Object.values($gameParty._items);
const itemKeys = Object.keys($gameParty._items);
const sum = itemNumbers.reduce((n, c) => (n + c), 0);
let r = Math.floor(Math.random() * sum);
let i;
for (i=0; i < itemKeys.length; i++) {
r -= itemNumbers[i];
if (r < 0) break;
}
$gameVariables.setValue(2, itemKeys[i]);