Skip to content

transpose() function

transpose 함수는 여러 이터레이터를 입력으로 받아 행과 열을 교환한 전치된 2D 배열을 반환합니다.

Unlike the existing zip function, transpose behaves as shown in the example below:

Signature:

typescript
declare function transpose<
  T extends UniversalIterable,
  R extends UniversalIterable[],
>(iterables: T): (...args: R) => ReturnZipType<[T, ...R]>;

Example

ts
const iter = transpose([1, 'a'], [2, 'b'], [3, 'c']);
iter.next() // {done:false, value: [1, 2, 3]}
iter.next() // {done:false, value: ['a', 'b', 'c']}
iter.next() // {done:true, value: undefined}

const iter = transpose([1, 2, 3], ['a', 'b', 'c']);
iter.next() // {done:false, value: [1, 'a']}
iter.next() // {done:false, value: [2, 'b']}
iter.next() // {done:false, value: [3, 'c']}
iter.next() // {done:true, value: undefined}

// How transpose differs from `zip`
const iter = zip([1, 2], [3], [], [4, 5, 6], [7], [8, 9]);
iter.next() // {done:true, value: undefined}
// Because zip stops at the shortest input, passing an empty array causes it to exit immediately.

// with pipe
pipe(
  [4, 5, 6, 7],
  transpose([1, 2, 3]),
  toArray,
) // [[ 1, 4 ], [ 2, 5 ], [ 3, 6 ], [7]]

pipe(
  Promise.resolve([4, 5, 6, 7]),
  transpose([1, 2, 3]),
  toArray,
) // [[ 1, 4 ], [ 2, 5 ], [ 3, 6 ], [7]]

// with toAsync
pipe(
  [Promise.resolve(4), Promise.resolve(5), Promise.resolve(6), Promise.resolve(7)],
  toAsync,
  transpose([1, 2, 3]),
  toArray,
) // [[ 1, 4 ], [ 2, 5 ], [ 3, 6 ], [7]]

Open Source Code

Released under the Apache-2.0 License.