क्या जावास्क्रिप्ट में एक तरह से मूल्यों की तुलना करना और यह देखना है कि क्या यह दूसरे सरणी में है?
PHP के in_array
फ़ंक्शन के समान है ?
क्या जावास्क्रिप्ट में एक तरह से मूल्यों की तुलना करना और यह देखना है कि क्या यह दूसरे सरणी में है?
PHP के in_array
फ़ंक्शन के समान है ?
जवाबों:
नहीं, यह एक नहीं है। इस कारण से अधिकांश लोकप्रिय पुस्तकालय अपने उपयोगिता पैकेज में एक के साथ आते हैं। उदाहरणों के लिए jQuery के inArray और प्रोटोटाइप के Array.indexOf को देखें।
jQuery का इसे लागू करना उतना ही सरल है जितना आप उम्मीद कर सकते हैं:
function inArray(needle, haystack) {
var length = haystack.length;
for(var i = 0; i < length; i++) {
if(haystack[i] == needle) return true;
}
return false;
}
यदि आप सरणी तत्वों की एक मात्रा के साथ काम कर रहे हैं, तो ऊपर की चाल अच्छी तरह से हो जाएगी।
संपादित करें : वूप्स। मैंने यह भी नहीं देखा कि आप यह देखना चाहते हैं कि एक सरणी दूसरे के अंदर थी या नहीं। PHP प्रलेखन के अनुसार यह PHP का अपेक्षित व्यवहार है 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
क्रिस और एलेक्स द्वारा पोस्ट किया गया कोड इस व्यवहार का पालन नहीं करता है। एलेक्स, प्रोटोटाइप के इंडेक्सऑफ का आधिकारिक संस्करण है, और क्रिस का PHP की तरह अधिक है 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 पांचवें संस्करण द्वारा मानकीकृत किया गया है, इसलिए इसे करने का उचित 'मूल' तरीका माना जाना चाहिए। यद्यपि आपको लंबे समय तक पुराने ब्राउज़र के लिए यह बैकअप सूँघना और प्रदान करना होगा। @harto: हाँ, यह 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;
}
और, बोनस के रूप में, यहाँ PHP के array_search के बराबर है (सरणी में तत्व की कुंजी खोजने के लिए:
function array_search(needle, haystack) {
for(var i in haystack) {
if(haystack[i] == needle) return i;
}
return false;
}
एक परियोजना है जिसे लोक्टस कहा जाता है , यह जावास्क्रिप्ट में PHP के कार्यों को लागू करता है और in_array () शामिल है, आप इसका उपयोग ठीक उसी तरह से कर सकते हैं जैसे आप PHP में करते हैं।
उपयोग के उदाहरण:
in_array('van', myArray);
in_array(1, otherArray, true); // Forcing strict type
आप बस w3schools पर इस पाठ में बताए गए "शामिल" फ़ंक्शन का उपयोग कर सकते हैं
ऐसा लग रहा है
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 समाधान उपलब्ध है, यहाँ ducumentation की जाँच करें: http://api.jquery.com/jquery.inarray/
$.inArray( 10, [ 8, 9, 10, 11 ] );
एक समान कार्य है:
includes()
यहां देखें: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
यदि आप केवल यह देखना चाहते हैं कि किसी एकल मान किसी सरणी में है, तो पाओलो का कोड काम करेगा। यदि आप जांचना चाहते हैं कि दोनों सरणियों में कौन से मूल्य सामान्य हैं, तो आप कुछ इस तरह से चाहते हैं (पाओलो के ऐरा फ़ंक्शन का उपयोग करके):
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;
}
यह मान है कि दोनों में हैं की एक सरणी लौट wil a
और b
। (गणितीय रूप से, यह दो सरणियों का एक चौराहा है।)
EDIT: अपनी समस्या के समाधान के लिए पाओलो का संपादित कोड देखें । :)
यदि आपको सभी PHP उपलब्ध मापदंडों की आवश्यकता है, तो इसका उपयोग करें:
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;
}
इस कोड को आप प्रोजेक्ट में जोड़ें और ऑब्जेक्ट-शैली inArray विधियों का उपयोग करें
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 टूलकिट के साथ , आप उपयोग करेंगे dojo.indexOf()
। प्रलेखन के लिए dojo.indexOf देखें , और कुछ उदाहरणों के लिए ब्रायन फोर्ब्स द्वारा निर्मित ऐरे ।
haystack.find(value => value == needle)
जहाँ एक प्रकार का वृक्ष एक सरणी है और सुई सरणी में एक तत्व है। यदि तत्व नहीं मिला तो अपरिभाषित वापस कर दिया जाएगा वही तत्व।
यदि आप इसे किसी कक्षा में उपयोग करने जा रहे हैं, और यदि आप इसे पसंद करते हैं (और सभी ब्राउज़रों में काम करते हैं):
inArray: function(needle, haystack)
{
var result = false;
for (var i in haystack) {
if (haystack[i] === needle) {
result = true;
break;
}
}
return result;
}
आशा है कि यह किसी की मदद करता है :-)
jQuery.inArray()
बूलियन वापस नहीं करता है । यह पाए गए तत्व के सूचकांक को वापस कर देता है या -1 नहीं मिला तो