배열 벤드펴기 및 정렬

비디오 링크


365일 인코딩 2일차!JavaScript에서 배열을 확장, 필터링, 정렬 및 배열하는 방법흔히 볼 수 있는 면접 문제의 해결 방안은 수조를 평평하게 펴서 유일한 값만 있는 수조로 만들고 숫자 순서에 따라 정렬하는 것이다.오늘 늦게 나는 확실히 테스트에 문자열을 추가했기 때문에, 나는 이전에 방금 숫자를 얻은 사람들에게 사과했다.그들의 테스트를 위해
면책 성명: 이 문제를 해결할 수 있는 많은 방법이 있습니다. 이것은 답입니다. 저는 코딩 면접에서 보거나 사용하고 정확한 답안으로 받아들일 것입니다.
TLDR: 게시물 하단에서 솔루션 설명

문제.


숫자나 문자열 그룹을 받아들이는 함수를 작성합니다. 이것은 임의의 수량을 포함하는 그룹을 포함할 수 있습니다.배열을 평평하게 펴서 원시 배열과 다른 숫자 순서로 배열하다
예를 들면 다음과 같습니다.
    flattenFilterAndSort([1, 1, 6, 9])  //[1, 6, 9]   
    flattenFilterAndSort([20, [3, 5], 10])  //[3, 5, 10, 20]   
    flattenFilterAndSort([[1,2,3],[[4,5],6,[7,8,9], 19, 21, [0, 1], ]])  //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 19, 21]
    flattenFilterAndSort(['Marv', ['Dakota', 'Boo'], 'Dakota']) //['Boo', 'Dakota', 'Marv']
    flattenFilterAndSort(['Happy', [['New'], ['Year']]]) //["Happy", "New", "Year"]

솔루션


이를 위해, 우리는 귀속 함수가 필요하다.귀속 함수는 자신을 호출하는 함수다.귀환에 익숙하지 않고 그것에 대한 정보를 더 알고 싶으면 this page를 보십시오.
그래서 우리가 무엇을 해야 하는지 자세히 분석해 봅시다.
  • 수용과 그룹을 만드는 함수
  • 모든 내용을 저장할 새 그룹을 만듭니다

  • 전달을 통해 순환하는 그룹

  • 현재 인덱스가 배열인지 확인
  • 배열이면
  • 단일 그룹만 있으면 현재 그룹
  • 과 연결합니다
  • 그렇지 않으면 평평한 필터와 정렬을 다시 사용해서 같은 검사를 수행합니다. - 여기는 귀속
  • 없으면 현재 인덱스를 새 그룹으로 전송하고 계속 순환

  • 일단 순환이 끝나면
  • 반복 필터를 고유 값
  • 으로 지정
  • 값을 정렬
  • 우선, 우리는 함수를 만들어야 한다
    function flattenFilterAndSort(arr){
        // create a new array to hold everything
        // loop through the passed array
            // check if the current index is an array
                // if its an array 
                    // if its only a single level array concatenate that array with the current array
                   // otherwise call flattenFilterAndSort again to do the same checks - recursion is here
              // if not push the current index to the new array and continue the loop
        // once loop has ended
            // filter the loop to be only unique values
           // sort those values
    }
    
    이제 최종 벤드펴기 패턴을 수용할 새 패턴을 만들어야 합니다.
    function flattenFilterAndSort(arr){
        let flatArray = []
        // loop through the passed array
            // check if the current index is an array
                // if its an array 
                    // if its only a single level array concatenate that array with the current array
                   // otherwise call flattenFilterAndSort again to do the same checks - recursion is here
              // if not push the current index to the new array and continue the loop
        // once loop has ended
            // filter the loop to be only unique values
           // sort those values
    }
    
    지금 우리는 전달된 그룹을 두루 훑어보아야 한다.for 순환에 익숙하지 않으면 this W3Schools page를 보십시오.
    function flattenFilterAndSort(arr) {
        let flatArray = [];
        for(var i = 0; i < arr.length; i++) {
            // check if the current index is an array
                // if its an array 
                    // if its only a single level array concatenate that array with the current array
                   // otherwise call flattenFilterAndSort again to do the same checks - recursion is here
              // if not push the current index to the new array and continue the loop
        // once loop has ended
            // filter the loop to be only unique values
           // sort those values
        }
    }
    
    현재 색인이 그룹인지 확인해야 합니다.니가 익숙하지 않으면isArray() 체크아웃this MDN page.
    function flattenFilterAndSort(arr) {
        let flatArray = [];
        for(var i = 0; i < arr.length; i++) {
             if(Array.isArray(arr[i])) {
                // if its an array 
                    // if its only a single level array concatenate that array with the current array
                   // otherwise call flattenFilterAndSort again to do the same checks - recursion is here
             } else {
              // if not push the current index to the new array and continue the loop
             }
        // once loop has ended
            // filter the loop to be only unique values
           // sort those values
        }
    }
    
    이제 재미있는 부분이 왔어요.니가 익숙하지 않으면계속하기 전에 this MDN page부터 확인하십시오.
    니가 쓰면concat () 는 수조에 있습니다. 이 수조를 연결할 수조와 합쳐서 평면 수조로 만들 것입니다.이것은 우리가 새로운 그룹을 만날 수 있는 모든 그룹과 연결해야 한다는 것을 의미한다.그러나, 우리는 우선 이 수조에도 끼워 넣은 수조가 있는지 검사해야 한다. (우리는 첫 번째 수조와 같은 방식으로 이 수조를 순환해야 한다.) 이것은 귀속될 때이다.따라서, 우리가 만나는 모든 수조에 대해, 우리는 우리가 이미 호출한 같은 함수를 호출하여, 이 수조가 평탄하다는 것을 확보할 것이다.패턴이 평면이면 모든 패턴이 연결되고 평면 패턴이 있을 때까지 패턴을 연결합니다.반복은 다음과 같습니다.
    function flattenFilterAndSort(arr) {
        let flatArray = [];
        for(var i = 0; i < arr.length; i++) {
             if(Array.isArray(arr[i])) {
                flatArray = flatArray.concat(flattenFilterAndSort(arr[i]));
             } else {
              // if not push the current index to the new array and continue the loop
             }
        // once loop has ended
            // filter the loop to be only unique values
           // sort those values
        }
    }
    
    이것은 약간 혼란스러워 보일 수 있습니다. 함수의 시작 부분에서 평면 그룹을 빈 그룹으로 설정했기 때문에, 매번 반복적으로 그것을 훑어볼 때마다, 우리는 그것을 [] 으로 설정합니다.비록 이것은 점차적으로 발생하지만, 너는 반드시 기억해야 한다.진열이 평평해질 때까지, 그것은 비로소 어떤 것도 연결할 수 없다.따라서 현재 사용되고 있는 어레이에서만 순환하며 이전 어레이에서는 순환하지 않습니다.평면 수조에 도달할 때마다, 그것은 그것을 이전의 수조와 연결한다.가장 많이 끼워 넣은 그룹을 먼저 찾은 다음 이전의 그룹에 연결시켜 하나의 단계가 될 때까지 추측한 다음에 원시 평면 그룹에 연결시킨다.만약 이것이 합리적이지 않다면, 컨트롤러 로그를 여섯 번째 줄에 놓으십시오. (flat Array = flat Array.concat (Flat Filter And Sort (arr [i]) 다음에) 최종 답이 나오면, 순환마다 어떤 평면 진열이 있는지 볼 수 있습니다. 이것은 당신에게 더욱 의미가 있을 수 있습니다. 다음은 하나의 예입니다.

    만약 그것이 하나의 수조가 아니라면, 우리가 해야 할 일은 원래대로 그것을 평면 수조에 놓는 것이다.니가 익숙하지 않으면푸시()체크아웃 가능this MDN page.
    function flattenFilterAndSort(arr) {
        let flatArray = [];
        for(var i = 0; i < arr.length; i++) {
            if(Array.isArray(arr[i])) {
                flatArray = flatArray.concat(flattenFilterAndSort(arr[i]));
            } else {
                flatArray.push(arr[i]);
            }
        }
          // once loop has ended
            // filter the loop to be only unique values
           // sort those values
    }
    
    우리는 편평한 진열을 여과해야 한다.너는 .filter()로 이 점을 실현할 수 있지만, 나는 spread의 평면 진열을 new Set로 바꿀 것이다. 왜냐하면 그것은 더욱 쉽기 때문이다.만약 그 중 어느 것도 익숙하지 않다면, 나는 MDN 페이지를 그것들에 연결했다.
    function flattenFilterAndSort(arr) {
        let flatArray = [];
        for(var i = 0; i < arr.length; i++) {
            if(Array.isArray(arr[i])) {
                flatArray = flatArray.concat(flattenFilterAndSort(arr[i]));
            } else {
                flatArray.push(arr[i]);
            }
        }
        return [...new Set(flatArray)]
        //sort those values
    }
    
    지금 우리가 해야 할 일은 그것들을 분류하는 것이다.문자열 그룹이 문자열 그룹인지 숫자 그룹인지 먼저 검사해야 합니다. 왜냐하면 이것은 우리가 그것들을 어떻게 정렬해야 하는지를 결정하기 때문입니다.너는 반드시 숫자를 말해야 한다.sort () 문자열로 정렬하는 방법정렬().이 기능에 익숙하지 않은 경우 this MDN page
    function flattenFilterAndSort(arr) {
        let flatArray = [];
        for(var i = 0; i < arr.length; i++) {
            if(Array.isArray(arr[i])) {
                flatArray = flatArray.concat(flattenFilterAndSort(arr[i]));
            } else {
                flatArray.push(arr[i]);
            }
        }
        return typeof(flatArray[0]) === 'string' ? [...new Set(flatArray)].sort() : [...new Set(flatArray)].sort((num1, num2) => {return num1 - num2}) 
    }
    
    됐다!마찬가지로 이 글을 쓰는 데는 많은 방법이 있다.나는 이 해결 방안의 성능과 가독성을 좋아한다.매일 아침 이메일로 도전을 받고 싶으시면 구독하세요here.당신이 제시한 해결 방안을 평론 부분에 남겨 주세요.만약 당신에게 어떤 도전이 있다면, 당신은 완성을 보고 싶으며, 아래의 댓글에 메시지를 남겨주세요. 당신은 그것이 나타나는 것을 볼 수 있습니다.

    좋은 웹페이지 즐겨찾기