2016-09-29 1 views
3

정렬 배열 함수는 두 가지 종류가 있습니다.이 두 가지 정렬 함수는 숫자 배열을 정렬하고 첫 번째 두 인덱스의 합계를 반환하지만 for 루프에서이 함수를 실행할 때 사용합니다. , 두 번째 기능은 정상적으로 작동하지 않습니다. 여기 정렬 함수는 for 루프에 넣을 때 다르게 동작합니다.

이 처음입니다 : 여기
function solution(numbers) { 
    numbers.sort(function (a, b) { 
     return a - b; 
    }); 
    return numbers[0] + numbers[1]; 
} 

이 두 번째입니다 :

for (let i = 0; i < 100; i++) { 
    var randArr = [Test.randomNumber()+1000,Test.randomNumber(),Test.randomNumber(),Test.randomNumber(),Test.randomNumber()]; 
    var staticArr = [1000, 50,12000, 275, 21000, 1]; 
    console.log("Result of user function is: " + sumTwoSmallestNumbers(staticArr) + ". Result of own function is: " + solution(staticArr)); 
    Test.assertEquals(sumTwoSmallestNumbers(randArr), solution(randArr)); 
} 

는 바이올린에 콘솔을 참조하십시오

function sumTwoSmallestNumbers(numbers) { 
    var findSmallest = function(startsAt){ 
     var first = startsAt; 
     for (var i =0; i<=numbers.length-1; i++){ 
      if(first >= numbers[i]){ 
       first = numbers[i]; 
      } 
     } 
     return first; 
    } 
    var smallest = findSmallest(numbers[0]); 
    var index = numbers.indexOf(smallest); 
    numbers.splice(index,1); 
    var secondSmallest = findSmallest(numbers[0]); 
    return smallest+secondSmallest 
}; 

이것은 for 루프 : https://jsfiddle.net/emporio/p4r7go57/1/

답변

6
numbers.splice(index,1); 

입력 배열을 수정하여 가장 작은 숫자를 제거합니다. sumTwoSmallestNumbers로 전화 할 때마다 항목이 제거되어 다음에 호출 할 때 결과가 변경됩니다.

관련 문제