>source

모든 함수 호출에서 배열의 배열에서 다음 값을 반복해야합니다.

외환 : 배열 배열이있는 경우

const Arr = [ ['1','2', '3'], ['11','12', '13'], ['11','22', '33'],]

그리고 나는 기능이 있습니다

getNumber(id: number): string {
 let n;
 for(const i in Arr) {
    for(const j in Arr[i]{
       n = j;
    }
 }
 return n;
}
            

여기에서 함수를 여러 번 호출해야하지만 매번 다음 번호를 반환해야합니다.

let i = 4;
for(let j=0; j<=i; j++) {
  const g = { 
   number: this.getNumber(i); //this i means id
  }
}

호출 함수 후에 다음과 같이 반환됩니다.

'1'
'2'
'3'
'11'
'12'

이 문제를 해결하도록 도와주세요

  • 답변 # 1

    생성기를 사용하여 함수를 호출 할 때마다 다음 값을 얻을 수 있습니다.

    다차원 배열을 평면 배열로 바꾸려면 Array.flat () 메서드를 사용할 수 있습니다.

    const Arr = [ ['1','2', '3'], ['11','12', '13'], ['11','22', '33'],];
    function* getNumber(arr) {  
      for(const num of arr) {
        yield num;
      }
    }
    const gen = getNumber(Arr.flat());
    console.log(gen.next().value);
    console.log(gen.next().value);
    console.log(gen.next().value);
    console.log(gen.next().value);
    console.log(gen.next().value);
    
    

  • 답변 # 2

    @Reyno의 답변에 표시된 것과 같은 생성기를 사용하는 내장 배열 반복기를 사용할 수 있습니다. 더 간단하고 이미 작성되었으므로 많은 코드를 작성할 필요가 없습니다.

    const arr = [[1],[2],[3],[4]];
    const it = arr.flat()[Symbol.iterator]();
    it.next() // { value: 1, done: false }
    it.next() // { value: 2, done: false }
    it.next() // { value: 3, done: false }
    it.next() // { value: 4, done: false }
    it.next() // { value: undefined, done: true }
    
    

    또한 ES6에서 왔기 때문에 생성기와 반복기를 사용하지 않으려면 함수를 작성하면됩니다.

    function getIterator(arr) {
      var counter = 0;
      return function next() {
        if (counter === arr.length) { return undefined; }
        return arr[counter++]; 
      };
    }
    var arr = [1, 2, 3, 4];
    var next = getIterator(arr);
    next(); // 1
    next(); // 2
    next(); // 3
    next(); // 4
    next(); // undefined
    next(); // undefined
    arr.push(5);
    next(); // 5
    
    
    

    그건 그렇고 ES6 +에서도 더 나은 솔루션이 될 수 있습니다. 배열 내부의 요소를 푸시 할 수 있고 여전히 새 요소를 반복 할 수 있기 때문입니다. 반복기/생성기 솔루션은 배열 끝에 도달하면 닫히므로 다시 반복하려면 새 솔루션을 만들어야합니다.

관련 자료

  • 이전 c++ - 크기가 다른 두 개의 2D 배열 곱하기
  • 다음 laravel - 모델을 감사 할 때 특정 사용자를 지정하는 방법이 있습니까?