Reducing a large array of objects to a simple object with 8 properties
I'd flip the field-id-to-name lookup around, and give it some more detail; e.g.

function defaultConverter(values) {
  return values[0].value;
} 

var mappings = {
  "89107336": { name: "title", converter: defaultConverter },
  "89107340": { name: "price", converter: defaultConverter },
  "89107344": { name: "desc", converter: defaultConverter },
  "89107337": {
    name: "date",
    converter: function (values) {
      return new Date(values[0].start_date);
    }
  },
  "89107348": {
    name: "img",
    converter: function (values) {
      return values[0].value.file_id;
    }
  },
  "89107415": {
    name: "attendees",
    converter: function (values) {
      var items = values.map(function (v) { return v.value.item_id });
      return JSON.stringify(items);
    }
  }
};


This way you declare how each piece of data should be treated, and you can easily extend it.

Your reduce can then become this:

var output = data.reduce(function (output, obj) {
  var mapper = mappings[obj.field_id];
  if(map) {
    output[map.name] = map.converter(obj.values)
  }
  return output;
}, {});




You can make the mapping declaration a little less repetitive like so:

function Mapping(name, converter) {
  this.name = name;
  this.converter = converter || function (values) { return values[0].value };
}

var mappings = {
  "89107336": new Mapping("title"),
  "89107340": new Mapping("price"),
  "89107344": new Mapping("desc"),
  "89107337": new Mapping("date", function (values) {
    return new Date(values[0].start_date);
  }),
  "89107348": new Mapping("img", function (values) {
    return values[0].value.file_id;
  }),
  "89107415": new Mapping("attendees", function (values) {
    var items = values.map(function (v) { return v.value.item_id });
    return JSON.stringify(items);
  })
};


and still use the same reduce function.