일부 함수에서 index를 받을 수 있나요?
Einere opened this issue · 2 comments
Einere commented
간혹 순회할 배열의 각 요소에 자체적인 인덱스 정보가 없는 경우가 있습니다.
이런 상황에서 각 요소의 index를 받고 싶은데, 아직 API 차원에서 제공하지는 않는 것 같더라구여.
그래서 다음과 같이 우회적으로 구현을 했습니다.
let index = 0;
go(
[{name: 'foo'}, {name: 'bar'}, {name: 'baz'}, ...],
map((item) => {
item.index = index;
i++;
return item;
}),
...
)
위 예제에서 map의 인자로 전달하는 함수가 index도 전달받을 수 있게 할 계획이 있으신가요?
아니라면 더 나은 방법으로 구현할 수 있나요?
shine1594 commented
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]
Einere commented
@shine1594
ㅇㅏ하 그렇군요 감사합니다!