2012-04-02 45 views
9

Tôi có 3 giá trị mà tôi muốn so sánh f, g và h. Tôi có một số mã để kiểm tra xem tất cả chúng đều bình đẳng với nhau và không có mã nào trong số đó là rỗng. Tôi đã có một cái nhìn trực tuyến nhưng không thể tìm thấy bất cứ điều gì dường như để trả lời truy vấn của tôi. Hiện nay tôi đang kiểm tra mã theo cách sau ...Javascript so sánh 3 giá trị

if(g == h && g == f && f == h && g != null && f != null && h != null) 
{ 
//do something 
} 

này là khá dài hơi và tôi có thể bổ sung thêm giá trị, vì vậy tôi đã tự hỏi nếu có một cách nhanh hơn để kiểm tra rằng không có giá trị là null và tất cả các giá trị bằng nhau?

Cảm ơn trước vì đã được trợ giúp.

+0

bạn sẽ ổn với việc đặt các giá trị đó trong một mảng? –

+0

Bạn không phải kiểm tra tất cả các biến nếu chúng là '! = Null' .. Nếu chúng bằng nhau, bạn có thể chỉ kiểm tra một biến với' null'. Cùng với việc kiểm tra 'f == h' .. nếu cả hai' f' và 'h' bằng' g' bạn không cần phải kiểm tra hai số đó. –

+0

bạn đã so sánh sự đánh đổi của việc đặt tất cả var vào một mảng? – cctan

Trả lời

27

Bạn có thể rút ngắn thời đó để

if(g === h && g === f && g !== null) 
{ 
//do something 
} 

Đối với một cách thực tế để so sánh nhiều giá trị (bất kể số họ)
(lấy cảm hứng từ/đơn giản @Rohan Prabhu câu trả lời)

function areEqual(){ 
    var len = arguments.length; 
    for (var i = 1; i< len; i++){ 
     if (arguments[i] === null || arguments[i] !== arguments[i-1]) 
     return false; 
    } 
    return true; 
} 

và gọi đây với

if(areEqual(a,b,c,d,e,f,g,h)) 
{ 
//do something 
} 
+0

Bạn thậm chí có thể bỏ qua '! = Null' – m90

+0

@ m90, tại sao? nếu tất cả là gì? –

+0

@ m90 mua cái gì nếu tất cả chúng đều rỗng? sau đó nó sẽ đánh giá thành 'true'. – David

4

Viết một hàm đơn giản:

var checkAllArguments = function() { 
    var len = arguments.length; 
    var obj; 

    if(len == 0) { 
     return true; 
    } else { 
     if(arguments[0] == null) { 
      return false; 
     } else { 
      obj = arguments[0]; 
     } 
    } 

    for(var i=1; i<len; i++) { 
     if(arguments[i] == null) { 
      return false; 
     } 

     if(obj == arguments[i]) { 
      continue; 
     } else { 
      return false; 
     } 
    } 

    return true; 
} 

Bây giờ, để kiểm tra nhiều tranh cãi, tất cả các bạn phải làm là:

if(checkAllArguments(g, h, f)) { 
    // Do something 
} 
4

Tôi đề nghị bạn viết một chức năng mà bạn đưa ra một mảng với tất cả các giá trị bạn muốn so sánh và sau đó lặp qua mảng để so sánh các giá trị với nhau:

function compareAllValues(a) { 
    for (var i = 0; i < a.length; i++) { 
     if (a[i] === null) { return false } 
     for (var j = 0; j < i; j++) { 
      if (a[j] !== a[i]) { return false } 
     } 
    } 

    return true; 
} 

nên là nó, tôi nghĩ :)

+0

Soln của bạn. là nhiều không gian phức tạp hơn nó phải được. –

4

Làm việc cho bất kỳ số lượng mặt hàng nào.

ES5

if ([f, g, h].every(function (v, i, a) { 
    return (
    v === a[0] && 
    v !== null 
); 
})) { 
    // Do something 
} 

ES2015

if ([f, g, h].every((v, i, a) => 
    v === a[0] && 
    v !== null 
)) { 
    // Do something 
} 
0

Thêm một distinct chức năng để Array.prototype:

Array.prototype.distinct = function() { 
    var result = []; 
    for(var i = 0; i < this.length; i++) { 
     if (result.indexOf(this[i]) == -1) { 
      result.push(this[i]); 
     } 
    } 
    return result; 
} 

Sau đó làm:

var myArray = [f, g, h]; 
if (myArray.indexOf(null) == -1 && myArray.unique().length == 1) 
{ 
    // no nulls and all elements have the same value! 
} 
Các vấn đề liên quan