Someone just wanted to animate boxes in diagonally. Just sum the row and column: .transition().delay(function(d,i) { return (d.row + d.column) * delay; })
.
This does not depend on data initially being sorted, or in any particular shape or arrangement; it could be square, rectangular, sparse, etc.
See also:
https://d3js.org/d3.v4.0.0-alpha.35.min.js