2013-03-29 4 views
0

두 배열을 비교하는 가장 좋은 방법을 찾으려고합니다.가장 크고 작은 배열 찾기 자바 스크립트

본질적으로 추가 처리를위한 최대 및 최소 배열을 알고 싶습니다. 이것은 내가 거기 추측이 일을보다 쉽고 효율적인 방법이어야하고, 작동하지만

merge: function(arrOne, arrTwo) { 

    if(arrOne == null || arrTwo == null) throw new Error(); 

    var bigArr = arrOne.length > arrTwo.length ? arrOne : arrTwo, 
     smallArr = bigArr.length == arrOne.length ? arrTwo : arrOne; 

    console.log(bigArr); 
    console.log(smallArr); 

} 

: 여기에 지금까지 일을 내 코드입니다. 이견있는 사람?

+0

코드가 작동합니다. 당신이 우리에게 말하지 않은 특정 제한이 없다면, 단 하나의 IF를 사용할 것입니다. –

+0

현재 구현에서 아무 것도 찾을 수 없습니다. 길이를 비교하는 것이 비효율적이지 않습니다. – techfoobar

+0

@JanDvorak 어떻게 하나의'if'로이 작업을 수행하겠습니까 ?? – Sethen

답변

0

가장 좋은 방법은 삼항 문자를 사용하지 않고 정상적인 조건을 작성하는 것입니다.

var bigArr, smallArr; 
if(arrOne.length > arrTwo.length){ 
    bigArr = arrOne; 
    smallArr = arrTwo; 
}else{ 
    smallArr = arrOne; 
    bigArr = arrTwo; 
} 

읽기 쉽고 빠르게 버그가 없습니다.

var bigArr = arrOne.length > arrTwo.length ? arrOne.length : arrTwo.length, 
    smallArr = arrOne.length > arrTwo.length ? arrTwo.length : arrOne.length; 
: 당신이 정말로는 (중복 선언 및 선언 후 할당을 방지하기 위해, 예를 들어) 삼항 연산자를 사용하려면 경우

, 아마도 올바른 해결책은 반복 (또는 캐시)하는 조건이 될 것입니다

어느 정도 읽기 쉽고 버그가 없으며 선언시 할당됩니다.

if 조건 중복을 피하려면, 여전히 가능합니다. 그러나 코드는 읽을 수 없으며 (주로 쉼표 연산자가 사용되기 때문에) 프로덕션 코드에 사용하면 안됩니다. 그것은 여전히 ​​코드 골프에 유용 할 수 있습니다.하지만 변수 이름을 적절히 지정하겠습니다. 주의해서 취급 :

l=(a.length>b.length)?(s=b,a):(s=a,b) 
0

배열 사이에 정의되지 않은 값이있는 경우 코드가 실패합니다. 이러한 조건을 처리해야하는 경우 완전히 다른 접근 방식을 시도 할 수 있습니다.

var myArray = new Array(); 
myArray[100] = true; 
console.log(myArray.length); // returns 101