জাভাস্ক্রিপ্টে কোনও অ্যারে থেকে মানগুলি তুলনা করার এবং এটি অন্য অ্যারেতে রয়েছে কিনা তা দেখার কোনও উপায় আছে?
পিএইচপি এর in_array
ফাংশন অনুরূপ ?
জাভাস্ক্রিপ্টে কোনও অ্যারে থেকে মানগুলি তুলনা করার এবং এটি অন্য অ্যারেতে রয়েছে কিনা তা দেখার কোনও উপায় আছে?
পিএইচপি এর in_array
ফাংশন অনুরূপ ?
উত্তর:
না, এটি একটি নেই। এই কারণে বেশিরভাগ জনপ্রিয় লাইব্রেরিগুলি তাদের ইউটিলিটি প্যাকেজের মধ্যে একটি নিয়ে আসে। উদাহরণস্বরূপ 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
নোট করুন যে আমি ইচ্ছাকৃতভাবে অ্যারে প্রোটোটাইপটি প্রসারিত করি নি কারণ এটি করা সাধারণত খারাপ ধারণা।
indexOf
w3schools.com/jsref/jsref_indexof_array.asp
এখন আছে Array.prototype.includes
:
অন্তর্ভুক্ত () পদ্ধতিটি নির্ধারণ করে যে অ্যারেতে কোনও নির্দিষ্ট উপাদান রয়েছে কিনা, যথাযথ হিসাবে সত্য বা মিথ্যা প্রত্যাবর্তন করা উচিত।
var a = [1, 2, 3];
a.includes(2); // true
a.includes(4); // false
বাক্য গঠন
arr.includes(searchElement)
arr.includes(searchElement, fromIndex)
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;
};
}
এমনকি আপনার স্ক্রিপ্টিং আনন্দের জন্য কিছু সহজে ব্যবহারের স্নিপেট রয়েছে।
this.length >>> 0
? এটি কি কোনও নম্বর ধরণের রূপান্তর?
Array.indexOf
এখন ECMAScript পঞ্চম সংস্করণ দ্বারা প্রমিত করা হয়েছে তাই এটি করার যথাযথ 'নেটিভ' উপায় বিবেচনা করা উচিত। যদিও আপনাকে এখনও পুরানো ব্রাউজারের জন্য দীর্ঘ সময়ের জন্য এই ব্যাকআপটি স্নিগ্ধ করতে হবে এবং সরবরাহ করতে হবে। @ হার্টো: হ্যাঁ, এটি this.length
এমন একটি সংখ্যায় রূপান্তরিত হয় যা 32-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যার হিসাবে উপস্থাপিত হতে পারে। একটি Array
নেটিভের কেবল একটি দৈর্ঘ্য থাকতে পারে যা ইতিমধ্যে এটি মেনে চলে, তবে অনুমান অনুসারে আপনি Array.prototype
নেটিভ-জেএস বস্তুগুলিতে পদ্ধতিগুলি কল করতে পারেন যা এটি নয় Array
। এটি এবং অন্যান্য পেডেন্টিক যুক্তি যাচাইয়ের জিনিসগুলি নিখুঁত স্পেস-সম্মতি গ্যারান্টিযুক্ত।
যদি সূচকগুলি ধারাবাহিক না হয় বা সূচকগুলি ধারাবাহিক না হয় তবে এখানে তালিকাভুক্ত অন্যান্য সমাধানগুলির কোডটি ভেঙে যাবে। একটি সমাধান যা কিছুটা ভাল কাজ করবে তা হতে পারে:
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;
}
লোকটাস নামে একটি প্রকল্প রয়েছে , এটি জাভাস্ক্রিপ্টে পিএইচপি ফাংশন প্রয়োগ করে এবং ইন_ারি () অন্তর্ভুক্ত রয়েছে, আপনি পিএইচপি-তে যেমন ব্যবহার করেন ঠিক তেমন ব্যবহার করতে পারেন।
ব্যবহারের উদাহরণ:
in_array('van', myArray);
in_array(1, otherArray, true); // Forcing strict type
আপনি ডাব্লু 3 স্কুলগুলিতে এই পাঠের ব্যাখ্যা অনুসারে কেবল "অন্তর্ভুক্ত" ফাংশনটি ব্যবহার করতে পারেন
এটা দেখতে অনেকটা
let myArray = ['Kevin', 'Bob', 'Stuart'];
if( myArray.includes('Kevin'))
console.log('Kevin is here');
var a = [1,2,3,4,5,6,7,8,9];
var isSixInArray = a.filter(function(item){return item==6}).length ? true : false;
var isSixInArray = a.indexOf(6)>=0;
jQuery সমাধান উপলব্ধ, এখানে ducamentation দেখুন: http://api.jquery.com/jquery.inarray/
$.inArray( 10, [ 8, 9, 10, 11 ] );
একটি সমতুল্য কার্য রয়েছে:
includes()
এখানে দেখুন: https://developer.mozilla.org/en-US/docs/Web/ জাভা স্ক্রিপ্ট / রেফারেন্স / গ্লোবাল_অবজেক্টস / অ্যারে / অন্তর্ভুক্ত
আপনি যদি কেবলমাত্র একক মান একটি অ্যারেতে আছে কিনা তা পরীক্ষা করতে চান তবে পাওলো কোডটি কাজটি করবে। যদি আপনি উভয় অ্যারেতে কোন মানগুলি সাধারণ কিনা তা পরীক্ষা করতে চান তবে আপনি এরকম কিছু চাইবেন (পাওলো ইনআর ফাংশন ব্যবহার করে):
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
। (গাণিতিকভাবে, এটি দুটি অ্যারের একটি ছেদ ))
সম্পাদনা: আপনার সমস্যার সমাধানের জন্য পাওলোর সম্পাদিত কোড দেখুন । :)
আপনার যদি সমস্ত পিএইচপি উপলব্ধ প্যারামিটারগুলির প্রয়োজন হয় তবে এটি ব্যবহার করুন:
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;
}
আপনার প্রকল্পে এই কোড যুক্ত করুন এবং অ্যারে পদ্ধতিতে অবজেক্ট-স্টাইল ব্যবহার করুন
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");
ডোজো টুলকিট দিয়ে আপনি ব্যবহার করবেন dojo.indexOf()
। ডকুমেন্টেশনের জন্য dojo.indexOf দেখুন এবং কিছু উদাহরণের জন্য ব্রায়ান ফোর্বসের দ্বারা অ্যারে মেড ইজি তৈরি করা হয়েছে ।
haystack.find(value => value == needle)
যেখানে খড়খড়ি একটি অ্যারে এবং সূচিতে অ্যারের উপাদান element যদি উপাদান না পাওয়া যায় তবে একই উপাদানটিকে অপরিজ্ঞাত করে ফিরিয়ে দেওয়া হবে।
আপনি যদি এটি কোনও শ্রেণিতে ব্যবহার করতে চলেছেন এবং যদি আপনি এটি কার্যকরী হতে পছন্দ করেন (এবং সমস্ত ব্রাউজারে কাজ করুন):
inArray: function(needle, haystack)
{
var result = false;
for (var i in haystack) {
if (haystack[i] === needle) {
result = true;
break;
}
}
return result;
}
আশা করি এটি কাউকে সাহায্য করবে :-)
jQuery.inArray()
নেই না বুলিয়ান ফিরে যান। এটি পাওয়া উপাদানটির সূচি ফেরত দেয় বা -১ পাওয়া না গেলে