marpple/FxJS

일부 함수에서 index를 받을 수 있나요?

Einere opened this issue · 2 comments

간혹 순회할 배열의 각 요소에 자체적인 인덱스 정보가 없는 경우가 있습니다.
이런 상황에서 각 요소의 index를 받고 싶은데, 아직 API 차원에서 제공하지는 않는 것 같더라구여.
그래서 다음과 같이 우회적으로 구현을 했습니다.

let index = 0;
go(
  [{name: 'foo'}, {name: 'bar'}, {name: 'baz'}, ...],
  map((item) => {
    item.index = index;
    i++;
    return item;
  }),
  ...
)

위 예제에서 map의 인자로 전달하는 함수가 index도 전달받을 수 있게 할 계획이 있으신가요?
아니라면 더 나은 방법으로 구현할 수 있나요?

zipWithIndexL 이라는 제너레이터 함수를 활용하여 index를 다룰 수도 있습니다. (ippL이라는 별칭으로도 사용하실 수 있어요.)

go(
 "abc",
 zipWithIndexL,
 mapL(([i, item]) => item + i),
  takeAll
);
// ['a0', 'b1', 'c2']

그리고 map, filter와 같은 함수는 의도적으로 보조함수에 index를 전달하지 않도록 구현된 것이고 변경할 계획은 없습니다.
map, filter, reduce의 보조함수에서 index를 필요로 하지 않는 경우가 더 일반적이기도 하고 의도치 않은 부수효과를 초래할 수도 있습니다.
예를 들면 아래와 같은 경우입니다.

  ['1', '2', '3'].map(parseInt) // [1, NaN, NaN]

@shine1594
ㅇㅏ하 그렇군요 감사합니다!