2009-05-20 37 views
10

Tôi cần một hàm javascript có thể mất trong một chuỗi và một mảng, và trả về true nếu chuỗi đó là trong mảng ..javascript chức năng inArray

function inArray(str, arr){ 
    ... 
} 

caveat: nó không thể sử dụng bất kỳ khuôn khổ javascript .

Trả lời

7

bạn có thể sử dụng arr.indexOf()

http://www.w3schools.com/jsref/jsref_indexof_array.asp

+0

Thú vị. Câu trả lời này (.indexOf (.)) Dường như làm việc cho mục đích của tôi. Là một newbie tò mò muốn biết lý do tại sao một phương pháp trong ngôn ngữ sẽ ít được ưa thích hơn với một chức năng tùy chỉnh. – prototype

+0

Tôi nhận thấy điều trên là cũ nhưng đáng để trả lời cho độc giả trong tương lai. array.indexOf() là Javascript 1.6. Các phiên bản cũ hơn của Javascript, như những phiên bản được tìm thấy trong Internet Explorer, không hỗ trợ nó vì thế chúng ta sẽ sử dụng một phương thức/polyfill tùy chỉnh khi cần thiết. – n0wak

+0

MDN có một polyfill bạn có thể cắt và dán trong: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf –

18

Bạn chỉ có thể thực hiện một chức năng mảng nguyên mẫu ala:

Array.prototype.hasValue = function(value) { 
    var i; 
    for (i=0; i<this.length; i++) { if (this[i] === value) return true; } 
    return false; 
} 

if (['test'].hasValue('test')) alert('Yay!'); 

Lưu ý việc sử dụng '===' thay vì '==' bạn có thể thay đổi điều đó nếu bạn cần khớp ít cụ thể hơn ... Nếu không [3] .hasValue ('3') sẽ trả về false.

+3

Bao gồm các var trong cho (...) là hợp lý gây hiểu lầm , vì nó cho thấy phạm vi của var chỉ nằm trong vòng lặp for (cho các lập trình đa ngôn ngữ). Tuy nhiên, phạm vi là toàn bộ chức năng. Ngoài ra, việc khai báo các biến ở điểm cao nhất trong phạm vi của chúng thường được coi là một thực hành tốt và là một cách tuyệt vời để tránh xung đột phạm vi. – Kato

1

Hãy xem this related question. Đây là mã từ câu trả lời được bình chọn hàng đầu.

function contains(a, obj) { 
    var i = a.length; 
    while (i--) { 
    if (a[i] === obj) { 
     return true; 
    } 
    } 
    return false; 
} 
8

Một cái gì đó như thế này?

function in_array(needle, haystack) 
{ 
    for(var key in haystack) 
    { 
     if(needle === haystack[key]) 
     { 
      return true; 
     } 
    } 

    return false; 
} 
+5

Tôi có lẽ không nên sử dụng cho (khóa trong mảng). Nếu ai đó đã mở rộng đối tượng Array thì nó sẽ lặp lại trên các phương thức/thuộc tính mới (không chỉ các giá trị mảng). – Matthew

+0

-1 Tốt hơn để sử dụng Array.prototype.indexOf(), dự phòng với một thư viện như gạch dưới, jQurey, vv và cuối cùng nếu không có thư viện nào được sử dụng hoặc có sẵn thì hãy sử dụng giải pháp trên ngoại trừ kiểm tra Object.prototype.hasOwnProperty(). – martin

-1

cẩn thận:

indexOf() sử dụng dữ liệu cục bộ. nếu bạn có '12', '1'

indexOf ('1') sẽ giúp bạn có được chỉ số của '12' không '1'

+0

Tôi nghĩ rằng bạn là sai tôi không thể bỏ phiếu xuống bạn nhưng bạn có thể vui lòng hỗ trợ câu trả lời của bạn? jsfiddle của tôi [ở đây] (http://jsfiddle.net/DDWr6/) chứng minh rằng bạn sai – Andreas

+0

Tôi nghĩ bạn đã nhầm lẫn các chỉ mục, ví dụ trên sẽ cung cấp cho bạn chỉ mục của một chỉ mục phù hợp cho '1'. Luôn nhớ rằng phần tử mảng đầu tiên có chỉ mục bằng 0 là chỉ mục '12' Hãy xem bản sao chính xác của ví dụ của bạn [ở đây] (http://jsfiddle.net/DDWr6/) – Andreas