俺の説明そんなに解りにくかったか?
need_items(t)をどうにかしろとは書かなかったはずなんだが…。
面倒なんで解答。×10以上には対応させてないんで不都合なら自分で直せ。

var mt_i = "", mt_n = 0; // グローバル変数
function ck_item(str) // "×"が含まれてるか調べる
{
  var i = str.indexOf("×");
  if (i == -1) return false;
  mt_i = str.substring(0, i);
  mt_n = +str.charAt(i + 1);
  return true;
}
----- enough_item(t)
for (var j = 0; j < data.count; j++) {
  if (ck_item(arr[i]) && mt_i == data[j].item && data[j].num >= mt_n) d++;
  else if (arr[i] == data[j].item && data[j].num > 0) d++;
}
----- mix(t)
for (var j = 0; j < data.count; j++) {
  if (ck_item(arr[i]) && mt_i == data[j].item) data[j].num -= mt_n;
  else if (arr[i] == data[j].item) data[j].num--;
}