routie dev init since i didn't adhere to any proper guidance up until now
This commit is contained in:
+41
@@ -0,0 +1,41 @@
|
||||
/**
|
||||
* Iterates through an array calling a callback for each adjacent pair.
|
||||
*
|
||||
* Processes elements in pairs where:
|
||||
*
|
||||
* - First call: left is null, right is the first element
|
||||
* - Subsequent calls: left and right are adjacent elements.
|
||||
*
|
||||
* This pattern is particularly useful for comparing adjacent elements in
|
||||
* sorting validation, where each element needs to be compared with its
|
||||
* predecessor to ensure correct ordering.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* ```ts
|
||||
* // Common use case: checking sort order
|
||||
* const numbers = [1, 3, 2, 4]
|
||||
* const errors: string[] = []
|
||||
*
|
||||
* pairwise(numbers, (left, right) => {
|
||||
* if (left !== null && left > right) {
|
||||
* errors.push(`${left} should come after ${right}`)
|
||||
* }
|
||||
* })
|
||||
* // errors = ['3 should come after 2']
|
||||
* ```
|
||||
*
|
||||
* @template T - Type of array elements.
|
||||
* @param nodes - Array to iterate through.
|
||||
* @param callback - Function called for each pair (including null for first).
|
||||
*/
|
||||
function pairwise(nodes, callback) {
|
||||
if (nodes.length === 0) {
|
||||
return
|
||||
}
|
||||
callback(null, nodes.at(0))
|
||||
for (let i = 1; i < nodes.length; i++) {
|
||||
callback(nodes.at(i - 1), nodes.at(i))
|
||||
}
|
||||
}
|
||||
export { pairwise }
|
||||
Reference in New Issue
Block a user