D3.js: Get an array of the data attached to a selection?

You can simply call .data() without any arguments on a selection to get the bound data. See the documentation:

If values is not specified, then this method returns the array of data for the first group in the selection. The length of the returned array will match the length of the first group, and the index of each datum in the returned array will match the corresponding index in the selection. If some of the elements in the selection are null, or if they have no associated data, then the corresponding element in the array will be undefined.

This does not work for the .enter() selection as there are no elements yet to which the data can be bound. In this case, the .map function can be used:

textEnter.map(function(d) { return d.__data__; });

If you want to access the entire data array from within a modification function, e.g., selection.attr, you can use the fact that the entire selection is passed to the modification function as its third argument. So you can reconstruct the data array as follows:

mySelection.attr("stroke", (_, __, nodes) => {
  let data = d3.selectAll(nodes).data()
  // Now you can use data.
}