জাভাস্ক্রিপ্ট অ্যারে আছে


152

ধরা যাক আমার কাছে এটি রয়েছে:

var blockedTile = new Array("118", "67", "190", "43", "135", "520");

আরও অ্যারে উপাদান রয়েছে তবে সেগুলি পঠনযোগ্যতার জন্য খুব কম। যাইহোক, আমি একটি "ফর" লুপটি করতে পারি তবে আপনি যখনই মানচিত্রে ক্লিক করবেন তখন এটি 500 টি লুপ করবে ... একটি নির্দিষ্ট স্ট্রিং অ্যারেতে রয়েছে কিনা তা দেখার অন্য কোনও উপায় আছে কি?

উত্তর:


247

এটা চেষ্টা কর:

if(blockedTile.indexOf("118") != -1)
{  
   // element found
}

24
এটি পুরানো ব্রাউজারগুলির জন্য কাজ করে না (যেমন আই <9)। এর জন্য একটি jQuery ফাংশন রয়েছে: api.jquery.com/jQuery.inArray
Vinicius Pinto

5
একটি দ্রুত উপায় হ'ল বিট if(!!~blockedTile.indexOf('118))
ওয়াইপ

11
@bm_i কোনটি দ্রুত ? দ্রুত টাইপ করা?
অ্যালেক্স

1
indexOf()আক্ষরিক অ্যারেতেও প্রয়োগ করা যেতে পারে, যেমন if (-1 == [84, 116].indexOf(event.keyCode))। ক্রোম 37.0.2062.122 এ পরীক্ষিত।
ফ্রাসোয়া

2
fwiw আমি সবসময় ব্যবহার indexOf(…) >= 0। কোনও পার্থক্য নেই এবং আমি ভুলে গিয়েছিলাম যেখানে আমি এটি অভ্যাস হিসাবে
তুলেছি

49

পূর্বে উল্লিখিত হিসাবে, যদি আপনার ব্রাউজার সমর্থন করে indexOf(), দুর্দান্ত! যদি তা না হয় তবে আপনার এটি পলিফিল করতে হবে বা লড্যাশ / আন্ডারস্কোরের মতো কোনও ইউটিলিটি বেল্টের উপর নির্ভর করতে হবে ।

কেবল এই নতুন ES2016 সংযোজনটি যুক্ত করতে চেয়েছিলেন (এই প্রশ্নটি আপডেট রাখতে):

Array.prototype.includes ()

if (blockedTile.includes("118")) {
    // found element
}

12
function in_array(needle, haystack){
    var found = 0;
    for (var i=0, len=haystack.length;i<len;i++) {
        if (haystack[i] == needle) return i;
            found++;
    }
    return -1;
}
if(in_array("118",array)!= -1){
//is in array
}

2
ওপি কোনও লুপ চায়নি
জেএনএফ

12

অ্যান্ডস্কোর.জেএস ব্যবহার করুন

এটি ক্রস ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ এবং যদি আপনার ডেটা বাছাই করা হয় তবে বাইনারি অনুসন্ধান করতে পারে।

_.সূচিপত্র

_.indexOf (অ্যারে, মান, [isorted]] যে সূচীতে অ্যারেতে সন্ধান করা যায়, বা -1 মান অ্যারেতে উপস্থিত না থাকলে ফিরিয়ে দেয়। অনুপস্থিত না থাকলে দেশীয় সূচিপত্রের ফাংশনটি ব্যবহার করে। যদি আপনি একটি বড় অ্যারে নিয়ে কাজ করছেন, এবং আপনি জানেন যে অ্যারে ইতিমধ্যে বাছাই করা হয়েছে, দ্রুত বাইনারি অনুসন্ধান ব্যবহার করার জন্য আইসক্রাডের জন্য সত্য পাস করুন।

উদাহরণ

//Tell underscore your data is sorted (Binary Search)
if(_.indexOf(['2','3','4','5','6'], '4', true) != -1){
    alert('true');
}else{
    alert('false');   
}

//Unsorted data works to!
if(_.indexOf([2,3,6,9,5], 9) != -1){
    alert('true');
}else{
    alert('false');   
}

11

কিছু ব্রাউজার সমর্থন করে Array.indexOf()

যদি তা না হয় তবে আপনি Arrayতার প্রোটোটাইপের মাধ্যমে অবজেক্টটি এর মতো বাড়িয়ে দিতে পারেন ...

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(searchElement /*, fromIndex */)
  {
    "use strict";

    if (this === void 0 || this === null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (len === 0)
      return -1;

    var n = 0;
    if (arguments.length > 0)
    {
      n = Number(arguments[1]);
      if (n !== n) // shortcut for verifying if it's NaN
        n = 0;
      else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
        n = (n > 0 || -1) * Math.floor(Math.abs(n));
    }

    if (n >= len)
      return -1;

    var k = n >= 0
          ? n
          : Math.max(len - Math.abs(n), 0);

    for (; k < len; k++)
    {
      if (k in t && t[k] === searchElement)
        return k;
    }
    return -1;
  };
}

উত্স


আমরা জাভাস্ক্রিপ্টে ('118' ব্লকডাইল) ব্যবহার করতে পারি না?
প্রভাত মিশ্র

1
@ প্রভাটমিশ্র যে কেবল চাবিগুলি পরীক্ষা করতে পারে।
অ্যালেক্স

9

শুধু আপনার স্বাদ জন্য ব্যবহার করুন:

var blockedTile = [118, 67, 190, 43, 135, 520];

// includes (js)

if ( blockedTile.includes(118) ){
    console.log('Found with "includes"');
}

// indexOf (js)

if ( blockedTile.indexOf(67) !== -1 ){
    console.log('Found with "indexOf"');
}

// _.indexOf (Underscore library)

if ( _.indexOf(blockedTile, 43, true) ){
    console.log('Found with Underscore library "_.indexOf"');
}

// $.inArray (jQuery library)

if ( $.inArray(190, blockedTile) !== -1 ){
    console.log('Found with jQuery library "$.inArray"');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>



6

2019 এ করার সর্বোত্তম উপায় হ'ল ব্যবহার করা .includes()

[1, 2, 3].includes(2);     // true
[1, 2, 3].includes(4);     // false
[1, 2, 3].includes(1, 2);  // false

প্রথম প্যারামিটারটি যা আপনি অনুসন্ধান করছেন। দ্বিতীয় প্যারামিটারটি এই অ্যারেতে সূচক অবস্থান যা অনুসন্ধান শুরু করা উচিত।

আপনার যদি এখানে ক্রসব্রোসি হওয়ার প্রয়োজন হয় - প্রচুর উত্তরাধিকারের উত্তর রয়েছে।


1
includesদ্রবণে নকল করা হয়েছে Kutyel (2016), Сергей Савельев (2017) এবং Krunal Limbad (2018) সমানভাবে বিস্তারিত উদাহরণের এবং তথ্যসূত্র সঙ্গে উত্তর ...
CPHPython

4

ইতিমধ্যে উপরে উত্তর দেওয়া হয়েছে তবে ভাগ করতে চেয়েছিলেন।

যদিও IE তে কাজ করবে না। এটি মাহমুদ উল্লেখ করার জন্য ধন্যবাদ

var array1 = [1, 2, 3];

console.log(array1.includes(2));
// expected output: true

var pets = ['cat', 'dog', 'bat'];

console.log(pets.includes('cat'));
// expected output: true

console.log(pets.includes('at'));
// expected output: false

এখানে কিছু রেফারেন্স পেয়েছি । তাদের উপরেও পলিফিল রয়েছে।


আপনি এটি ব্যবহার করার সময় সাবধান হন। Array.includes()ES7 (ECMAScript 2017) এ চালু হয়েছে এবং পুরানো ব্রাউজারগুলির সাথে কাজ করবে না। বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

3

আপনার উপলব্ধ জাভাস্ক্রিপ্টের সংস্করণ অনুসারে আপনি ব্যবহার করতে পারেন indexOf:

অ্যারেতে প্রদত্ত উপাদানটি পাওয়া যাবে এমন প্রথম সূচকটি প্রদান করে, বা -1 উপস্থিত না থাকলে ফিরে আসে।

বা some:

অ্যারেতে কিছু উপাদান সরবরাহিত ফাংশন দ্বারা প্রয়োগ করা পরীক্ষায় পাস করে কিনা তা পরীক্ষা করে।

তবে, আপনি যদি এই ধরণের অস্তিত্বটি পরীক্ষা করে থাকেন তবে আপনার স্ট্রিংগুলি সংরক্ষণ করার জন্য কোনও অবজেক্ট ব্যবহার করা ভাল (বা সম্ভবত কোনও কোনও জিনিস পাশাপাশি অ্যারে আপনি কীভাবে আপনার ডেটা দিয়ে যাচ্ছেন তার উপর নির্ভর করে) ব্যবহার করা ভাল।


3

আমি একটি ভিন্ন ডেটা স্ট্রাকচার ব্যবহার করতাম, যেহেতু অ্যারে মনে হয় সেরা সমাধান নয়।

অ্যারের পরিবর্তে হ্যাশ-টেবিল হিসাবে কোনও অবজেক্টটি ব্যবহার করুন:

( জেসবিনে পোস্টও )

var arr = ["x", "y", "z"];
var map = {};
for (var k=0; k < arr.length; ++k) {
  map[arr[k]] = true;
}

function is_in_map(key) {
  try {
    return map[key] === true;
  } catch (e) {
    return false;
  }
}


function print_check(key) {
  console.log(key + " exists? - " + (is_in_map(key) ? "yes" : "no"));
}

print_check("x");
print_check("a");

কনসোল আউটপুট:

x exists? - yes
a exists? - no

এটি একটি সরাসরি-সমাধান সমাধান solution যদি আপনি কোনও অবজেক্ট ওরিয়েন্টেড পদ্ধতির দিকে বেশি থাকেন তবে "জেএস ​​হ্যাশটেবল" এর জন্য গুগল অনুসন্ধান করুন ।


3

পুরানো ব্রাউজারগুলির সাথে আইএমএইচও সবচেয়ে উপযুক্ত

Array.prototype.inArray = function( needle ){

    return Array(this).join(",").indexOf(needle) >-1;

}

var foods = ["Cheese","Onion","Pickle","Ham"];
test = foods.inArray("Lemon");
console.log( "Lemon is " + (test ? "" : "not ") + "in the list." );

একটি অ্যারে অনুলিপিটি কোনও সিএসভি স্ট্রিংয়ে পরিণত করে, আপনি পুরানো ব্রাউজারগুলিতে স্ট্রিংটি পরীক্ষা করতে পারেন।


3
এটি ইতিবাচক মিথ্যা হবে যদি অ্যারে সদস্যগুলির মধ্যে কোনও সূচকে অন্তর্ভুক্ত করে তবে তা কেবল এটি ছিল না। যেমন ['Lemon Pie'].inArray('Lemon')ফিরে আসবে True। আপনি তার চারপাশে ,যাওয়ার জন্য সুইটি জড়িয়ে রাখতে পারেন বা একইভাবে করতে রেজেক্স ম্যাচিং ব্যবহার করতে পারেন তবে ,একই ধরণের মিথ্যা-ইতিবাচক কারণে ( |বলুন) অপেক্ষা আরও অস্পষ্ট কিছু ব্যবহার করে যোগ দেওয়া ভাল । এটি ডেটাসেটের উপর নির্ভর করে
জেএসডিব্রোটন

1

আপনি আরে.ফিল্টার ব্যবহার করবেন না কেন?

var array = ['x','y','z'];
array.filter(function(item,index,array){return(item==YOURVAL)}).

কেবল এটি আপনার কোডটিতে অনুলিপি করুন এবং আপনি এখানে যান:

Array.prototype.inArray = function (searchedVal) {
return this.filter(function(item,index,array){return(item==searchedVal)}).length==true
}

0

অ্যারে উদাহরণে, পিএইচপি তে এটি একই (in_array)

 var ur_fit = ["slim_fit", "tailored", "comfort"];
 var ur_length = ["length_short", "length_regular", "length_high"];
    if(ur_fit.indexOf(data_this)!=-1){
        alert("Value is avail in ur_fit array");
    }
    else if(ur_length.indexOf(data_this)!=-1){      
         alert("value is avail in ur_legth array"); 

    }

0
var myArray = [2,5,6,7,9,6];
myArray.includes(2) // is true
myArray.includes(14) // is false

4
কোনও কোডের টুকরো পোস্ট করা কোনও উত্তর নয় , এর উপরে আপনার ব্যাখ্যা যুক্ত করা উচিত।
xoxel

1
যদিও এই কোড স্নিপেট সমস্যার সমাধান করতে পারে, এটি কেন বা কীভাবে প্রশ্নের উত্তর দেয় তা ব্যাখ্যা করে না। আপনার কোডটির জন্য একটি ব্যাখ্যা অন্তর্ভুক্ত করুন , কারণ এটি সত্যিই আপনার পোস্টের মান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না। ফ্ল্যাগার্স / পর্যালোচক: কোড-উত্তরগুলির জন্য যেমন এই, ডাউনভোট, মুছবেন না!
লুকা কিবেল

ইতিমধ্যে বেশ কয়েকটি উত্তর ব্যবহার করার পরামর্শ দিচ্ছে includes। এই উত্তরটি তাদের তুলনায় কীভাবে কোনও অতিরিক্ত মান সরবরাহ করে?
বোঘইন হফম্যান

0

আপনি কোড নীচে চেষ্টা করতে পারেন। পরীক্ষা করে দেখুন http://api.jquery.com/jquery.grep/

var blockedTile = new Array("118", "67", "190", "43", "135", "520");
var searchNumber = "11878";
arr = jQuery.grep(blockedTile, function( i ) {
  return i === searchNumber;
});
if(arr.length){ console.log('Present'); }else{ console.log('Not Present'); }

অররের দৈর্ঘ্য পরীক্ষা করুন যদি এটির চেয়ে বেশি মানে এর স্ট্রিং উপস্থিত থাকে অন্যথায় এটি উপস্থিত না।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.