জাভাস্ক্রিপ্ট পিএইচপি এর_আরয়ের সমতুল্য ()


223

জাভাস্ক্রিপ্টে কোনও অ্যারে থেকে মানগুলি তুলনা করার এবং এটি অন্য অ্যারেতে রয়েছে কিনা তা দেখার কোনও উপায় আছে?

পিএইচপি এর in_arrayফাংশন অনুরূপ ?

উত্তর:


258

না, এটি একটি নেই। এই কারণে বেশিরভাগ জনপ্রিয় লাইব্রেরিগুলি তাদের ইউটিলিটি প্যাকেজের মধ্যে একটি নিয়ে আসে। উদাহরণস্বরূপ jQuery এর অ্যারে এবং প্রোটোটাইপের অ্যারে.ইন্ডেক্সঅফ দেখুন

jQuery এর বাস্তবায়ন যতটা সহজ আপনি আশা করতে পারেন:

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

যদি আপনি উপরের উপাদানগুলির একটি বুদ্ধিমান পরিমাণের সাথে কাজ করে থাকেন তবে উপরের কৌশলটি দুর্দান্তভাবে করবে।

সম্পাদনা : ওফফফ। এমনকি আপনি খেয়ালও করতে পারেননি যে আপনি দেখতে চেয়েছিলেন কোনও অ্যারে অন্যর মধ্যে রয়েছে কিনা। পিএইচপি ডকুমেন্টেশন অনুসারে এটি পিএইচপি'র প্রত্যাশিত আচরণ in_array:

$a = array(array('p', 'h'), array('p', 'r'), 'o');

if (in_array(array('p', 'h'), $a)) {
    echo "'ph' was found\n";
}

if (in_array(array('f', 'i'), $a)) {
    echo "'fi' was found\n";
}

if (in_array('o', $a)) {
    echo "'o' was found\n";
}

// Output:
//  'ph' was found
//  'o' was found

ক্রিস এবং অ্যালেক্সের পোস্ট করা কোডটি এই আচরণটি অনুসরণ করে না। অ্যালেক্স হ'ল প্রোটোটাইপের সূচকের অফিশিয়াল সংস্করণ এবং ক্রিস এর পিএইচপি-র মতোই array_intersect। এটি আপনি যা চান তা করে:

function arrayCompare(a1, a2) {
    if (a1.length != a2.length) return false;
    var length = a2.length;
    for (var i = 0; i < length; i++) {
        if (a1[i] !== a2[i]) return false;
    }
    return true;
}

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

এবং এটি এটি উপরোক্ত আমার পরীক্ষা:

var a = [['p','h'],['p','r'],'o'];
if(inArray(['p','h'], a)) {
    alert('ph was found');
}
if(inArray(['f','i'], a)) {
    alert('fi was found');
}
if(inArray('o', a)) {
    alert('o was found');
}  
// Results:
//   alerts 'ph' was found
//   alerts 'o' was found

নোট করুন যে আমি ইচ্ছাকৃতভাবে অ্যারে প্রোটোটাইপটি প্রসারিত করি নি কারণ এটি করা সাধারণত খারাপ ধারণা।


1
jQuery.inArray()নেই না বুলিয়ান ফিরে যান। এটি পাওয়া উপাদানটির সূচি ফেরত দেয় বা -১ পাওয়া না গেলে
ব্র্যাড কেন্ট

উচ্চ রেটিংয়ের কারণে - আপনার উত্তরটি পুরানো হিসাবে চিহ্নিত করা উচিত
গিফ্রিড


74

এখন আছে Array.prototype.includes:

অন্তর্ভুক্ত () পদ্ধতিটি নির্ধারণ করে যে অ্যারেতে কোনও নির্দিষ্ট উপাদান রয়েছে কিনা, যথাযথ হিসাবে সত্য বা মিথ্যা প্রত্যাবর্তন করা উচিত।

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

বাক্য গঠন

arr.includes(searchElement)
arr.includes(searchElement, fromIndex)

66

Array.indexOfজাভাস্ক্রিপ্ট 1.6 এ চালু হয়েছিল, তবে এটি পুরানো ব্রাউজারগুলিতে সমর্থিত নয়। ধন্যবাদ মোজিলার চ্যাপসগুলি আপনার জন্য সমস্ত কঠোর পরিশ্রম করেছে, এবং আপনাকে এটি সামঞ্জস্যতার জন্য সরবরাহ করেছে:

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

এমনকি আপনার স্ক্রিপ্টিং আনন্দের জন্য কিছু সহজে ব্যবহারের স্নিপেট রয়েছে।


এটি ইতিমধ্যে এখানে পোস্ট করা লিংক / কোডের একটি ভাল / নিরাপদ / আরও ভাল বাস্তবায়ন; চশমাটি খড়ের গর্তের ভিতরে অ্যারেগুলি পরীক্ষা করার জন্য ডাকে না, এবং এটিই ওপি চায়।
পাওলো বার্গান্টিনো

3
ঘটনাচক্রে, এর উদ্দেশ্য কী this.length >>> 0? এটি কি কোনও নম্বর ধরণের রূপান্তর?
হার্টো

3
Array.indexOfএখন ECMAScript পঞ্চম সংস্করণ দ্বারা প্রমিত করা হয়েছে তাই এটি করার যথাযথ 'নেটিভ' উপায় বিবেচনা করা উচিত। যদিও আপনাকে এখনও পুরানো ব্রাউজারের জন্য দীর্ঘ সময়ের জন্য এই ব্যাকআপটি স্নিগ্ধ করতে হবে এবং সরবরাহ করতে হবে। @ হার্টো: হ্যাঁ, এটি this.lengthএমন একটি সংখ্যায় রূপান্তরিত হয় যা 32-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যার হিসাবে উপস্থাপিত হতে পারে। একটি Arrayনেটিভের কেবল একটি দৈর্ঘ্য থাকতে পারে যা ইতিমধ্যে এটি মেনে চলে, তবে অনুমান অনুসারে আপনি Array.prototypeনেটিভ-জেএস বস্তুগুলিতে পদ্ধতিগুলি কল করতে পারেন যা এটি নয় Array। এটি এবং অন্যান্য পেডেন্টিক যুক্তি যাচাইয়ের জিনিসগুলি নিখুঁত স্পেস-সম্মতি গ্যারান্টিযুক্ত।
ববিনস

3
মজিলা থেকে সরাসরি একটি আলাদা পলিফিল সংস্করণ উপলব্ধ রয়েছে - বিকাশকারী.মোজিলা.অর্গ
অ্যালজি টেলর

@harto আমি আপনার মন্তব্যের পরে 8 বছর উত্তর কিন্তু হয়তো অন্য কেউ = একই প্রশ্ন থাকতে পারে> দেখুন stackoverflow.com/questions/1822350/...
তুহিন জেড

14

যদি সূচকগুলি ধারাবাহিক না হয় বা সূচকগুলি ধারাবাহিক না হয় তবে এখানে তালিকাভুক্ত অন্যান্য সমাধানগুলির কোডটি ভেঙে যাবে। একটি সমাধান যা কিছুটা ভাল কাজ করবে তা হতে পারে:

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

এবং, একটি বোনাস হিসাবে, এখানে পিএইচপি এর অ্যারে_সার্কের সমতুল্য (অ্যারেতে উপাদানটির কীটি সন্ধান করার জন্য:

function array_search(needle, haystack) {
    for(var i in haystack) {
        if(haystack[i] == needle) return i;
    }
    return false;
}

প্রতিস্থাপনে দুর্দান্ত ড্রপ। সত্যিই পিএইচপি থেকে নোডে পোর্টিং করা সহজ। ধন্যবাদ
রহিম খোজা

9

লোকটাস নামে একটি প্রকল্প রয়েছে , এটি জাভাস্ক্রিপ্টে পিএইচপি ফাংশন প্রয়োগ করে এবং ইন_ারি () অন্তর্ভুক্ত রয়েছে, আপনি পিএইচপি-তে যেমন ব্যবহার করেন ঠিক তেমন ব্যবহার করতে পারেন।

ব্যবহারের উদাহরণ:

in_array('van', myArray);

in_array(1, otherArray, true); // Forcing strict type

4
জিকুয়েরির এপিআইগুলিতে একটি ইনআরে ফাংশনও রয়েছে। পরীক্ষা করে দেখুন api.jquery.com/jQuery.inArray
ahPo

@ এহোপো, ভাল লাগল! তবে লোকুটাস বাস্তবায়নের কোনও নির্ভরতা ছাড়াই খাঁটি জাভাস্ক্রিপ্ট হওয়ার সুবিধা রয়েছে। সুতরাং, আপনার প্রয়োজনের জন্য
সেরাটি

1
অথবা আপনি কেবল লোকটাস থেকে প্রয়োজনীয় ফাংশনটি আমদানি করতে পারেন ।
নিকেত পাঠক

7

আপনি ডাব্লু 3 স্কুলগুলিতে এই পাঠের ব্যাখ্যা অনুসারে কেবল "অন্তর্ভুক্ত" ফাংশনটি ব্যবহার করতে পারেন

এটা দেখতে অনেকটা

let myArray = ['Kevin', 'Bob', 'Stuart'];
if( myArray.includes('Kevin'))
console.log('Kevin is here');



5

jQuery সমাধান উপলব্ধ, এখানে ducamentation দেখুন: http://api.jquery.com/jquery.inarray/

$.inArray( 10, [ 8, 9, 10, 11 ] );

3
এটির মতো চেক করতে ভুলবেন না: যদি ($। অ্যারে (10, [8, 9, 10, 11])> -1) কারণ আমি এটি পছন্দ করেছি: যদি ($। ইন অ্যারে (10, [8, 9, 10, 11])) এবং এটি সর্বদা সত্য ফিরে আসে
টেমিরবাইক

পিএস: এটি সংবেদনশীল প্রকারের তাই সংখ্যার জন্য পরীক্ষা করে যদি নিশ্চিত হয় যে আপনার ডেটাটাইপগুলি মিলছে! যেমন: in .আরআর ('10', [8, 9, 10, 11]); -1
অলিভার এম গ্রেচ


3

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

function arrayIntersect(a, b) {
    var intersection = [];

    for(var i = 0; i < a.length; i++) {
        if(inArray(b, a[i]))
            intersection.push(a[i]);
    }

    return intersection;
}

এই উইলটি মানগুলির একটি অ্যারে প্রদান করবে যা উভয় aএবং b। (গাণিতিকভাবে, এটি দুটি অ্যারের একটি ছেদ ))

সম্পাদনা: আপনার সমস্যার সমাধানের জন্য পাওলোর সম্পাদিত কোড দেখুন । :)


যদিও এটি দুর্দান্ত তবে ওপি যা চেয়েছিল তা আসলে নয়; এটি পিএইচপি-র ইন_আরয়ের কার্যকারিতাটি প্রতিলিপি করে না।
পাওলো বার্গান্টিনো

3

আপনার যদি সমস্ত পিএইচপি উপলব্ধ প্যারামিটারগুলির প্রয়োজন হয় তবে এটি ব্যবহার করুন:

function in_array(needle, haystack, argStrict) {
    var key = '', strict = !!argStrict;
    if (strict) {
        for (key in haystack) {
            if (haystack[key] === needle) {
                return true;
            }
        }
    }
    else {
        for (key in haystack) {
            if (haystack[key] == needle) {
                return true;
            }
        }
    }
    return false;
}

3

আপনার প্রকল্পে এই কোড যুক্ত করুন এবং অ্যারে পদ্ধতিতে অবজেক্ট-স্টাইল ব্যবহার করুন

if (!Array.prototype.inArray) {
    Array.prototype.inArray = function(element) {
        return this.indexOf(element) > -1;
    };
} 
//How it work
var array = ["one", "two", "three"];
//Return true
array.inArray("one");


2
haystack.find(value => value == needle)

যেখানে খড়খড়ি একটি অ্যারে এবং সূচিতে অ্যারের উপাদান element যদি উপাদান না পাওয়া যায় তবে একই উপাদানটিকে অপরিজ্ঞাত করে ফিরিয়ে দেওয়া হবে।



1

আমি একটি মহান jQuery এর সমাধান পাওয়া এখানে তাই।

var success = $.grep(array_a, function(v,i) {
    return $.inArray(v, array_b) !== -1;
}).length === array_a.length;

আন্ডারস্কোরে এটি কীভাবে করা যায় তার একটি উদাহরণ পোস্ট করুন।


1
function in_array(needle, haystack){

    return haystack.indexOf(needle) !== -1;
}

এটি কেবল অ্যারের মধ্যে প্রথম উপাদান কিনা তা ফেরত দেয়; যদি indexOf(needle) > 0এটি মিথ্যা ফেরত দেয়
DiMono

0

একটি সমতুল্য in_arrayসঙ্গে underscoreহয় _.indexOf

উদাহরণ:

_.indexOf([3, 5, 8], 8); // returns 2, the index of 8 _.indexOf([3, 5, 8], 10); // returns -1, not found


0

আপনি যদি এটি কোনও শ্রেণিতে ব্যবহার করতে চলেছেন এবং যদি আপনি এটি কার্যকরী হতে পছন্দ করেন (এবং সমস্ত ব্রাউজারে কাজ করুন):

inArray: function(needle, haystack)
{
    var result = false;

    for (var i in haystack) {
        if (haystack[i] === needle) {
            result = true;
            break;
        }
    }

    return result;
}

আশা করি এটি কাউকে সাহায্য করবে :-)

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