यदि आपको प्रकार के जोर की जरूरत नहीं है (उपयोग के कारण indexOf
), तो आप निम्नलिखित की तरह कुछ आज़मा सकते हैं:
var arr = [1, 2, 3];
var check = [3, 4];
var found = false;
for (var i = 0; i < check.length; i++) {
if (arr.indexOf(check[i]) > -1) {
found = true;
break;
}
}
console.log(found);
जहां arr
लक्ष्य आइटम शामिल हैं। अंत में, found
दिखाएगा कि लक्ष्य के खिलाफ दूसरे सरणी में कम से कम एक मैच था या नहीं ।
बेशक, आप अपने द्वारा उपयोग की जाने वाली किसी भी चीज़ के लिए नंबर स्वैप कर सकते हैं - तार ठीक हैं, जैसे आपका उदाहरण।
और मेरे विशिष्ट उदाहरण में, परिणाम होना चाहिए true
क्योंकि 3
लक्ष्य में दूसरी सरणी मौजूद है।
अपडेट करें:
यहां बताया गया है कि मैं इसे एक समारोह में कैसे व्यवस्थित करूँगा (पहले से कुछ मामूली बदलावों के साथ):
var anyMatchInArray = (function () {
"use strict";
var targetArray, func;
targetArray = ["apple", "banana", "orange"];
func = function (checkerArray) {
var found = false;
for (var i = 0, j = checkerArray.length; !found && i < j; i++) {
if (targetArray.indexOf(checkerArray[i]) > -1) {
found = true;
}
}
return found;
};
return func;
}());
डेमो: http://jsfiddle.net/u8Bzt/
इस मामले में, फ़ंक्शन को संशोधित किया targetArray
जा सकता है इसे बंद करने में हार्डकोड के बजाय एक तर्क के रूप में पारित किया जा सकता है।
UPDATE2:
हालांकि, मेरा समाधान ऊपर काम कर सकता है और (उम्मीद से अधिक) पठनीय हो सकता है, मेरा मानना है कि जिस अवधारणा का मैंने वर्णन किया है उसे संभालने के लिए "बेहतर" तरीका कुछ अलग ढंग से करना है। उपरोक्त समाधान के साथ "समस्या" यह है कि indexOf
लूप के अंदर लक्ष्य सरणी को अन्य मद में प्रत्येक आइटम के लिए पूरी तरह से लूप किए जाने का कारण बनता है। यह आसानी से "लुकअप" (एक नक्शा ... एक जावास्क्रिप्ट ऑब्जेक्ट शाब्दिक) का उपयोग करके "तय" किया जा सकता है। यह दो सरल छोरों की अनुमति देता है, प्रत्येक सरणी पर। यहाँ एक उदाहरण है:
var anyMatchInArray = function (target, toMatch) {
"use strict";
var found, targetMap, i, j, cur;
found = false;
targetMap = {};
// Put all values in the `target` array into a map, where
// the keys are the values from the array
for (i = 0, j = target.length; i < j; i++) {
cur = target[i];
targetMap[cur] = true;
}
// Loop over all items in the `toMatch` array and see if any of
// their values are in the map from before
for (i = 0, j = toMatch.length; !found && (i < j); i++) {
cur = toMatch[i];
found = !!targetMap[cur];
// If found, `targetMap[cur]` will return true, otherwise it
// will return `undefined`...that's what the `!!` is for
}
return found;
};
डेमो: http://jsfiddle.net/5Lv9v/
इस समाधान के लिए नकारात्मक पक्ष यह है कि केवल संख्या और तार (और बूलियन) का उपयोग किया जा सकता है (सही ढंग से), क्योंकि मान (अव्यवस्थित रूप से) तार में परिवर्तित होते हैं और लुकअप मैप की कुंजी के रूप में सेट होते हैं। यह गैर-शाब्दिक मूल्यों के लिए बिल्कुल अच्छा / संभव / आसानी से नहीं किया गया है।
for
लूप का उपयोग करें और लक्ष्य सरणी पर पुनरावृति करें । यदि प्रत्येक तत्व वर्तमान सरणी के भीतर समाहित है (उपयोग करेंcurrent.indexOf(elem) !== -1)
, तो वे सभी वहां मौजूद हैं।