>  Q&A  >  본문

javascript - 어레이 중복 제거 문제

이제 객체 배열이 있다고 가정

으아악

동일한 ID를 제거하고 각 ID의 마지막 항목을 유지하고 싶습니다

으아악

더 좋은 방법이 있나요? .

女神的闺蜜爱上我女神的闺蜜爱上我2690일 전625

모든 응답(9)나는 대답할 것이다

  • 漂亮男人

    漂亮男人2017-06-28 09:26:12

    관례에 따라 ES6 코드

    으아악

    여기서 문제가 있습니다. findIndex최소 2개 이상의 브라우저가 지원하지 않으니, 지원하지 않는다면 직접 작성하셔야 합니다

    으아악

    기타 솔루션

    클래식 솔루션, 지도 사용

    id는 문자열이 아니므로 ES6 Map 클래스를 사용하세요. 데이터의 양이 많은 경우 조회 테이블을 사용하면 목록의 선형 검색에 비해 효율성이 크게 향상될 수 있습니다.

    으아악

    실제로 지도 대신 개체를 사용할 수도 있습니다. 적어도 이 사용 사례에서는 문제가 없습니다. es6에는 기능이 없기 때문에 es5 구문을 사용합니다. 코드 구조와 로직은 위 문단과 동일합니다

    으아악

    정수 ID를 사용하는 이상한 해결책

    정수형 ID이기 때문에 이 ID에 따라 배열에 직접 넣을 수 있습니다. 동일한 ID가 발견되면 바로 교체됩니다. ID가 연속적이지 않으면 마지막에 빈 요소를 필터링해야 합니다

    으아악

    이 솔루션에는 원래 배열 요소의 순서를 유지할 수 없다는 또 다른 문제가 있습니다. 그러면 누군가는 Map을 사용한 솔루션이 코드를 그렇게 복잡하게 만들지 않고도 유사한 코드로 줄일 수 있다고 생각할 것입니다. 물론 원래 순서를 잃을 수도 있습니다

    . 으아악

    참고: 위의 코드는 모두 실제로 실행되어 전달되었으며, 실행 환경은 Node v8.1.2

    입니다.

    회신하다
    0
  • 某草草

    某草草2017-06-28 09:26:12

    으아악

    화살표 기능을 사용하면 다음과 같이 단순화됩니다.

    으아악

    회신하다
    0
  • 仅有的幸福

    仅有的幸福2017-06-28 09:26:12

    여기에는 이미 많은 답변이 있지만 Array의 내장 함수인 ReduceRight에 대한 언급은 없습니다. 실제로 질문자의 요구 사항은 동일한 ID의 마지막 숫자를 유지하는 것인데, 이는 ReduceRight로 구현하는 데 매우 편리합니다.

    으아악

    reduceRight는 원래 배열의 끝에서 반복을 시작합니다. 여기서 초기 값은 배열입니다. r[0]은 ID 집합을 저장하는 데 사용되고 r[1]은 결과 배열을 저장하는 데 사용됩니다. Set에 id를 추가한 다음 이 ID를 Set에 추가하고 이 항목을 결과 배열의 헤드에 배치합니다.

    결국 주제 소유자의 요구 사항이 쉽게 충족되었으며 순서가 보장되었습니다.

    회신하다
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-28 09:26:12

    으아악

    개인적으로 테스트를 거쳤으며 효과적입니다

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-28 09:26:12

    으아악

    회신하다
    0
  • 滿天的星座

    滿天的星座2017-06-28 09:26:12

    let newArr = [],

    으아악

    회신하다
    0
  • 学习ing

    学习ing2017-06-28 09:26:12

    으아악

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-06-28 09:26:12

    참고해주세요

    으아악

    회신하다
    0
  • 为情所困

    为情所困2017-06-28 09:26:12

    제가 블로그에 쓴 글을 참고하시면 됩니다. http://alfierichou.top/2017/0...

    회신하다
    0
  • 취소회신하다