트리 데이터 구조의 반복자에 어떤 문제가 있습니까?

xkeyscore

트리 데이터 구조에 대한 순진한 반복기를 구현하려고합니다. 트리의 마지막 노드 이름 ( '레벨 2 : B')이 콘솔에 인쇄되지 않는 이유는 무엇입니까? 반복자에 어떤 문제가 있습니까?

class Node {
    constructor(name) {
        this.name = name;
        this.child = [];
    }

    add(name) {
        const node = new Node(name);
        this.child.push(node);
        return node;
    }

    [Symbol.iterator]() {
        return this;
    }

    next() {
        if (this.current === undefined) {
            this.current = 0;
            return {
                done: (this.child.length > 0) ? false : true,
                value: this
            }
        }

        const other = this.child[this.current].next();
        if (other.done) {
            this.current++;
            if (this.current < this.child.length) {
                other.done = false;
            }
        }
        return other;
    }
}

const root = new Node('level 0');
let node = root.add('level 1: A');
node.add('level 2: A');
root.add('level 1: B');
root.add('level 1: C');
node = root.add('level 1: D');
node.add('level 2: B');

for (const node of root) {
    console.log(node.name);
}

console.log(root);

이것은 매우 간단해야하지만 작동하지 않습니다.

조나스 윌 름스

마지막 노드에는 자식이 없기 때문에 다음을 반환합니다.

 return {
   done: true,
   value: this
 }

done 이로 설정 되었기 때문에 true이것은 반복자 산출 된 값이 아니라 반환 값입니다. 수동으로 호출하면 얻을 수 .next()있지만 for..of무시합니다.

이 솔루션은하는 것입니다 양보 this 첫 번째 (세트 done에를 false) 다음 반환 .

그러나 실제로 Node는 반복자가 아니라 반복 가능해야합니다. 그러면 쉽게 구현할 수 있습니다.

 [Symbol.iterator]*() {
    yield this;
    for(const child of this.child)
       yield* child;
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

이 mysql 트리거 정의에 어떤 문제가 있습니까?

분류에서Dev

이 IF-ELSE의 조건에 어떤 문제가 있습니까?

분류에서Dev

내 업데이트 쿼리에 어떤 문제가 있습니까?

분류에서Dev

# 1064-SQL 구문에 오류가 있습니다.이 쿼리에 어떤 문제가 있습니까?

분류에서Dev

ComboBox의 데이터 바인딩에 어떤 문제가 있습니까?

분류에서Dev

React Native의 색상 리터럴에 어떤 문제가 있습니까?

분류에서Dev

Swift의 json에서 내 데이터를 구문 분석하는 데 어떤 문제가 있습니까?

분류에서Dev

R에서이 함수의 논리에 어떤 문제가 있습니까?

분류에서Dev

이 코드의 메트릭 인수에 어떤 문제가 있습니까?

분류에서Dev

내 웹 사이트의 스크롤바에 어떤 문제가 있습니까?

분류에서Dev

이 구문에 어떤 문제가 있습니까?

분류에서Dev

이 구문에 어떤 문제가 있습니까?

분류에서Dev

이 유성 구문에 어떤 문제가 있습니까?

분류에서Dev

이진 검색 트리의 메서드 삽입에 어떤 문제가 있습니까?

분류에서Dev

내 프로젝트 계층 구조에 어떤 문제가 있습니까?

분류에서Dev

이 SQL 쿼리에 어떤 문제가 있습니까?

분류에서Dev

내 SQL 업데이트에 어떤 문제가 있습니까? 자바

분류에서Dev

이 strlen () 구현에 어떤 문제가 있습니까?

분류에서Dev

이 PHP 코드의 SQL 구문에 어떤 문제가 있습니까?

분류에서Dev

이 코드의 chr에 어떤 문제가 있습니까?

분류에서Dev

내 Android ListView의 높이에 어떤 문제가 있습니까?

분류에서Dev

APUE의이 코드에 어떤 문제가 있습니까?

분류에서Dev

내 SQL 쿼리에 어떤 문제가 있습니까? 데이터를 저장하지 않습니다.

분류에서Dev

내 C # 업데이트 코드에 어떤 문제가 있습니까?

분류에서Dev

데이터 프레임의 주문 기능에 어떤 문제가 있습니까?

분류에서Dev

오류가 발생했습니다. 하위 쿼리가 둘 이상의 값을 반환했습니다. 내 검색어에 어떤 문제가 있습니까?

분류에서Dev

바이너리 검색 알고리즘 구현에 어떤 문제가 있습니까?

분류에서Dev

내 트리거에 어떤 문제가 있습니까? Oracle SQLPLUS

분류에서Dev

이 선택기의 필터 방법에 어떤 문제가 있습니까?

Related 관련 기사

  1. 1

    이 mysql 트리거 정의에 어떤 문제가 있습니까?

  2. 2

    이 IF-ELSE의 조건에 어떤 문제가 있습니까?

  3. 3

    내 업데이트 쿼리에 어떤 문제가 있습니까?

  4. 4

    # 1064-SQL 구문에 오류가 있습니다.이 쿼리에 어떤 문제가 있습니까?

  5. 5

    ComboBox의 데이터 바인딩에 어떤 문제가 있습니까?

  6. 6

    React Native의 색상 리터럴에 어떤 문제가 있습니까?

  7. 7

    Swift의 json에서 내 데이터를 구문 분석하는 데 어떤 문제가 있습니까?

  8. 8

    R에서이 함수의 논리에 어떤 문제가 있습니까?

  9. 9

    이 코드의 메트릭 인수에 어떤 문제가 있습니까?

  10. 10

    내 웹 사이트의 스크롤바에 어떤 문제가 있습니까?

  11. 11

    이 구문에 어떤 문제가 있습니까?

  12. 12

    이 구문에 어떤 문제가 있습니까?

  13. 13

    이 유성 구문에 어떤 문제가 있습니까?

  14. 14

    이진 검색 트리의 메서드 삽입에 어떤 문제가 있습니까?

  15. 15

    내 프로젝트 계층 구조에 어떤 문제가 있습니까?

  16. 16

    이 SQL 쿼리에 어떤 문제가 있습니까?

  17. 17

    내 SQL 업데이트에 어떤 문제가 있습니까? 자바

  18. 18

    이 strlen () 구현에 어떤 문제가 있습니까?

  19. 19

    이 PHP 코드의 SQL 구문에 어떤 문제가 있습니까?

  20. 20

    이 코드의 chr에 어떤 문제가 있습니까?

  21. 21

    내 Android ListView의 높이에 어떤 문제가 있습니까?

  22. 22

    APUE의이 코드에 어떤 문제가 있습니까?

  23. 23

    내 SQL 쿼리에 어떤 문제가 있습니까? 데이터를 저장하지 않습니다.

  24. 24

    내 C # 업데이트 코드에 어떤 문제가 있습니까?

  25. 25

    데이터 프레임의 주문 기능에 어떤 문제가 있습니까?

  26. 26

    오류가 발생했습니다. 하위 쿼리가 둘 이상의 값을 반환했습니다. 내 검색어에 어떤 문제가 있습니까?

  27. 27

    바이너리 검색 알고리즘 구현에 어떤 문제가 있습니까?

  28. 28

    내 트리거에 어떤 문제가 있습니까? Oracle SQLPLUS

  29. 29

    이 선택기의 필터 방법에 어떤 문제가 있습니까?

뜨겁다태그

보관