dataset(chart, e, options, useFinalPosition) {
      const position = getRelativePosition(e, chart);
      const axis = options.axis || 'xy';
      const includeInvisible = options.includeInvisible || false;
      let items = options.intersect
        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :
        getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);

      if (items.length > 0) {
        const datasetIndex = items[0].datasetIndex;
        const data = chart.getDatasetMeta(datasetIndex).data;
        items = [];
        for (let i = 0; i < data.length; ++i) {
          items.push({element: data[i], datasetIndex, index: i});
        }
      }

      return items;
    }
Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something
If the options.intersect is false, we find the nearest item and return the items in that dataset
@function Chart.Interaction.modes.dataset
@param {Chart} chart - the chart we are returning items from
@param {Event} e - the event we are find things at
@param {InteractionOptions} options - options to use
@param {boolean} [useFinalPosition] - use final element position (animation target)
@return {InteractionItem[]} - items that are found