2012-09-27 51 views
146

Tôi có một mảng chuỗi và một chuỗi. Tôi muốn kiểm tra chuỗi này với các giá trị mảng và áp dụng một điều kiện là kết quả - nếu mảng chứa chuỗi "A", thì khác "B".Làm cách nào để kiểm tra xem chuỗi chuỗi có chứa một chuỗi trong JavaScript không?

Tôi có thể làm như thế nào?

+1

Check it out: http://stackoverflow.com/questions/237104/array -containsobj-in-javascript –

+1

indexOf [Tài liệu MDN] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf) – epascarello

+0

lặp qua mảng và so sánh từng cái một! – SachinGutte

Trả lời

277

Có một phương pháp indexOf rằng tất cả các mảng có (ngoại trừ Internet Explorer 8 và bên dưới) mà sẽ trở lại với chỉ số của một phần tử trong mảng, hoặc -1 nếu nó không có trong mảng:

if (yourArray.indexOf("someString") > -1) { 
    //In the array! 
} else { 
    //Not in the array 
} 

Nếu bạn cần hỗ trợ các trình duyệt IE cũ, bạn có thể thực hiện phương pháp này bằng cách sử dụng mã trong số the MDN article.

4

này sẽ làm điều đó cho bạn:

function inArray(needle, haystack) { 
    var length = haystack.length; 
    for(var i = 0; i < length; i++) { 
     if(haystack[i] == needle) 
      return true; 
    } 
    return false; 
} 

Tôi tìm thấy nó trong Stack Overflow câu hỏi JavaScript equivalent of PHP's in_array().

+3

Và bạn đã sáng tạo lại indexOf được trình duyệt hiện đại hỗ trợ. – epascarello

+7

... không được IE hỗ trợ trước IE9 - rất nhiều người, bao gồm cả tôi, phải phát triển cho IE8 (và thật đáng buồn là IE7 phần lớn thời gian). Phải thừa nhận rằng, phương pháp nguyên mẫu tạo hàm indexOf là một giải pháp thích hợp hơn cho những gì tôi đã đăng – ollie

15
var stringArray = ["String1", "String2", "String3"]; 

return (stringArray.indexOf(searchStr) > -1) 
40

Bạn có thể sử dụng phương pháp indexOf và "mở rộng" lớp Array với phương pháp contains như thế này:

Array.prototype.contains = function(element){ 
    return this.indexOf(element) > -1; 
}; 

với kết quả như sau:

["A", "B", "C"].contains("A") bằng true

["A", "B", "C"].contains("D") = false

+0

Câu trả lời hay, nhưng đáng lưu ý là các mối quan tâm về tính tương thích đối với các phiên bản IE cũ khi sử dụng indexOf. –

+11

không ai quan tâm đến ví dụ, ngay cả microsoft: D – andygoestohollywood

+0

@andygoestohollywood Đáng buồn thay một số công ty vẫn sử dụng IE. Chỉ vì một số công ty đang trong thời kỳ đồ đá không có nghĩa là bạn nên đổ 9% thị trường của mình. –

8

Tạo chức năng này nguyên mẫu:

Array.prototype.contains = function (needle) { 
    for (i in this) { 
     if (this[i] == needle) return true; 
    } 
    return false; 
} 

và sau đó bạn có thể sử dụng đoạn mã sau để tìm kiếm trong mảng x

if (x.contains('searchedString')) { 
    // do a 
} 
else 
{ 
     // do b 
} 
+1

Đọc [Tại sao sử dụng “cho… trong” với lặp lại mảng như một ý tưởng tồi?] (Https://stackoverflow.com/questions/500504/why-is-using- for-in-with-array-iteration-such-a-bad-idea) – Bergi

Các vấn đề liên quan