Bagaimana menemukan jika array berisi string tertentu dalam JavaScript/jQuery?

Dapatkah seseorang memberitahu saya bagaimana untuk mendeteksi jika "specialword" muncul dalam array? Contoh:

categories: [
    "specialword"
    "word1"
    "word2"
]
Mengomentari pertanyaan (4)
Larutan

Anda benar-benar don't perlu jQuery untuk ini.

var myarr = ["I", "like", "turtles"];
var arraycontainsturtles = (myarr.indexOf("turtles") > -1);

Petunjuk: indexOf mengembalikan nomor, yang mewakili posisi di mana ditentukan searchvalue terjadi untuk pertama kalinya, atau -1 jika tidak pernah terjadi

atau

function arrayContains(needle, arrhaystack)
{
    return (arrhaystack.indexOf(needle) > -1);
}

It's dicatat bahwa array.indexOf(..) adalah tidak didukung di IE < 9, tetapi jQuery's indexOf(...) fungsi ini akan bekerja bahkan untuk versi yang lebih tua.

Komentar (7)

jQuery menawarkan $.inArray:

Perhatikan bahwa inArray mengembalikan indeks dari elemen yang ditemukan, sehingga 0 menunjukkan elemen pertama dalam array. -1 menunjukkan elemen tidak ditemukan.

var categoriesPresent = ['word', 'word', 'specialword', 'word'];
var categoriesNotPresent = ['word', 'word', 'word'];

var foundPresent = $.inArray('specialword', categoriesPresent) > -1;
var foundNotPresent = $.inArray('specialword', categoriesNotPresent) > -1;

console.log(foundPresent, foundNotPresent); // true false
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Edit 3,5 tahun kemudian

$.inArray lebih efektif pembungkus untuk Array.prototipe.indexOf di browser yang mendukung (hampir semua dari mereka hari ini), sambil memberikan shim pada orang-orang yang don't. Hal ini pada dasarnya sama dengan menambahkan shim untuk Array.prototipe, yang lebih idiomatik/JSish cara melakukan sesuatu. MDN menyediakan kode tersebut. Hari-hari ini saya akan mengambil pilihan ini, daripada menggunakan jQuery wrapper.

var categoriesPresent = ['word', 'word', 'specialword', 'word'];
var categoriesNotPresent = ['word', 'word', 'word'];

var foundPresent = categoriesPresent.indexOf('specialword') > -1;
var foundNotPresent = categoriesNotPresent.indexOf('specialword') > -1;

console.log(foundPresent, foundNotPresent); // true false

Edit lagi 3 tahun kemudian

Wah, 6,5 tahun?!

Pilihan terbaik untuk ini di modern Javascript Array.prototipe.termasuk:

var found = categories.includes('specialword');

Tidak ada perbandingan dan tidak membingungkan -1 hasil. Itu tidak apa yang kita inginkan: mengembalikan true atau false. Untuk browser lama itu's polyfillable menggunakan kode di MDN.

var categoriesPresent = ['word', 'word', 'specialword', 'word'];
var categoriesNotPresent = ['word', 'word', 'word'];

var foundPresent = categoriesPresent.includes('specialword');
var foundNotPresent = categoriesNotPresent.includes('specialword');

console.log(foundPresent, foundNotPresent); // true false
Komentar (22)

Di sini anda pergi:

$.inArray('specialword', arr)

Fungsi ini mengembalikan sebuah integer positif (indeks array dari nilai yang diberikan), atau -1 jika nilai yang diberikan tidak ditemukan dalam array.

Demo Live: http://jsfiddle.net/simevidas/5Gdfc/

Anda mungkin ingin menggunakan ini seperti:

if ( $.inArray('specialword', arr) > -1 ) {
    // the value is in the array
}
Komentar (0)

Anda dapat menggunakan untuk loop:

var found = false;
for (var i = 0; i < categories.length && !found; i++) {
  if (categories[i] === "specialword") {
    found = true;
    break;
  }
}
Komentar (3)

Saya don't seperti $.inArray(..), it's jenis jelek, jQuery-ish solusi yang paling waras orang-orang yang tidak't mentolerir. Berikut ini's cuplikan yang menambahkan sederhana berisi(str) metode untuk gudang senjata anda:

$.fn.contains = function (target) {
  var result = null;
  $(this).each(function (index, item) {
    if (item === target) {
      result = item;
    }
  });
  return result ? result : false;
}

Demikian pula, anda bisa membungkus $.inArray di perpanjangan:

$.fn.contains = function (target) {
  return ($.inArray(target, this) > -1);
}
Komentar (2)