2016-07-04 2 views
11

나는이 있습니다. 각 행 다음에 <div class="clearfix"></div>을 삽입하고 싶습니다.자바 스크립트지도 배열의 마지막 항목

필자는 어떻게 든 각 행의 마지막 인덱스를 얻을 수 있다면 행 맵 콜백에서 사용할 수있을 것이라고 생각합니다. 누군가 어떻게 내게 그것을 보여줄 수 있습니까?

+1

실제로 달성하고자하는 것은 무엇입니까? – kazenorin

답변

20
const rowLen = row.length; 
row.map((rank, i) => { 
    if (rowLen === i + 1) { 
    // last one 
    } else { 
    // not last one 
    } 
}) 
+0

감사합니다. 완벽하게 작동했습니다. – cocacrave

5

LeoYuan 袁力皓 대답은 이것이 정답이지만 조금 개선 될 수 있습니다.
map은 반복 된 배열 자체 인 세 번째 매개 변수가있는 함수를 허용합니다. 당신이 범위를 혼합하면

  1. , 그것은 특히 잘못 작성된 코드에서 예상치 못한 버그가 발생할 수 있습니다 : 대신 row.lengtharr.length를 사용

    row.map((rank, i, arr) => { 
        if (arr.length - 1 === i) { 
         // last one 
        } else { 
         // not last one 
        } 
    }); 
    

    여러 가지 이유로 더 나은 및 올바른 접근 방법이다. 일반적으로 가능한 경우 범위 간 혼합을 피하는 것이 좋습니다.

  2. 명시 적 배열을 제공하려는 경우 잘 작동합니다. 예 : 당신이 (주로 성능 향상을 위해)을 map 범위 외부에서 콜백을 이동 싶은 경우에

    [1,2,3,4].map((rank, i, arr) => { 
        if (arr.length - 1 === i) { 
         // last one 
        } else { 
         // not last one 
        } 
    }); 
    
  3. , 범위를 벗어으로 row.length을 사용하는 것이 잘못된 것입니다. 예 : 영업 경우 :

    const mapElement = (rowIndex, state, toggled, onClick) => { 
        return (rank, i, arr) => { 
         let lastIndex = arr.length - 1; 
         return [element(rowIndex, i, state, rank, toggled, onClick, lastIndex)]; 
        }; 
    }; 
    
    map = ranks.map((row, r) => row.map(mapElement(r, state, toggled, onClick))); 
    
+1

왜'row.length' 대신'arr'을 추가합니까? – Sanderfish

+0

@Sanderfish 세 가지 이유 : 1. 일반적으로 스코프를 섞어 놓는 것을 좋아하지 않습니다.이 방법은 특히이 코드가 거대한 응용 프로그램의 일부일 때 더 깨끗한 솔루션을 만듭니다. 이 솔루션은 명시 적으로 정의 된 배열, 예를 들어. '[1,2,3] .map ((rank, i, arr) => {...})'; 3. 어떤 이유로 든 (예를 들어 루프에서) 범위 밖에서 콜백을 이동하기로 결정한 경우'row.length'를 실행하면 작동하지 않습니다. 내 대답을 분명히하기 위해 업데이트 할 것입니다. –

+3

'.map (rank, i, {length}) => {...})' –

1

허용 대답에 약간의 개선 :

const lastIndex = row.length - 1; 
row.map((rank, i) => { 
    if (i === lastIndex) { 
    // last one 
    } else { 
    // not last one 
    } 
}) 

이것은 루프 내부에서 연산을 제거합니다.

관련 문제