Extract lines under the specified heading
Review


Your function skips until the heading is found and than takes element until the next heading. Perhaps we could split these methods up to make them reusable. 
Try to avoid var (undesired scope), prefer let or const instead.
Prefer a Tree data structure over flat list for hierarchical data.


Refactored for Reusability

Skip items while a predicate is true.

  function skipWhile(items, predicate) {
    let ok = false;
    return items.filter((value, index, array) =&gt; {
      if (!ok &amp;&amp; !predicate(value)){
        ok = true;
      }
      return ok;
    });
  };


Take items while a predicate is true.

  function takeWhile(items, predicate) {
    let ok = true;
    return items.filter((value, index, array) =&gt; {
      if (ok &amp;&amp; !predicate(value)){
        ok = false;
      }
      return ok;
    });
  };


The OP method:

 function getLines (headingId) {
    let lines = skipWhile(data, v =&gt; v.id != headingId);
    lines.shift(); // we don't want the heading
    lines = takeWhile(lines, v =&gt; !v.isHeading);
    return lines;
  }


And verification:

  console.log(getLines(9).map(x =&gt; x.description))


Yielding:


  (3) [ "Blah 7" , "Blah 8" , "Blah 9" ]


You could also create these methods as prototype extensions on Array or refactor them to become generator functions (with yield syntax). I am sure these methods could get optimized for performance somehow.