जावास्क्रिप्ट के लिए कई शर्तें .includes () विधि


101

बस सोच रहा था, वहाँ एक .includes विधि में कई शर्तों को जोड़ने का एक तरीका है, उदाहरण के लिए:

    var value = str.includes("hello", "hi", "howdy");

कॉमा राज्यों "या" की कल्पना करो।

यह अब पूछ रहा है कि क्या स्ट्रिंग में हैलो, हाय या हाउडी शामिल हैं। तो केवल अगर एक, और केवल एक ही स्थिति सही है।

क्या ऐसा करने का कोई तरीका है?


1
orइसका मतलब है कि कम से कम एक मैच पर्याप्त होगा।
रॉबर्टक्लेप

1
शामिल विधि के साथ समाधान की तलाश करने के बजाय, आप इस तरह से ['hello', 'hi', 'howdy'].indexOf(str)
इंडेक्सऑफ की

@SkanderJenhani कम से कम पढ़ें और टिप्पणी करने से पहले प्रयास करें। आपका सुझाव हमेशा वापस आएगा-1
21

2
इसके लिए क्या किया जा सकता है &&?
अरोरा

जवाबों:


30

अगर एक भी काम करना चाहिए, और केवल एक ही स्थिति सही है:

var str = "bonjour le monde vive le javascript";
var arr = ['bonjour','europe', 'c++'];

function contains(target, pattern){
    var value = 0;
    pattern.forEach(function(word){
      value = value + target.includes(word);
    });
    return (value === 1)
}

console.log(contains(str, arr));

सिर्फ एक नोट। Google Apps स्क्रिप्ट में इसे आज़माने वाले किसी भी व्यक्ति को TypeError: stackoverflow.com/questions/51291776/…
कर्ट लीडली

207

आप यहाँ.some संदर्भित विधि का उपयोग कर सकते हैं ।

some()विधि परीक्षण है कि क्या सरणी में कम से कम एक तत्व परीक्षण में सफ़ल प्रदान की समारोह द्वारा कार्यान्वित।

// test cases
var str1 = 'hi, how do you do?';
var str2 = 'regular string';

// do the test strings contain these terms?
var conditions = ["hello", "hi", "howdy"];

// run the tests against every element in the array
var test1 = conditions.some(el => str1.includes(el));
var test2 = conditions.some(el => str2.includes(el));

// display results
console.log(str1, ' ===> ', test1);
console.log(str2, ' ===> ', test2);


3
ध्यान दें: some()एक विधि है, ऑपरेटर नहीं। अन्यथा, अच्छा जवाब।
Mitya

मुद्दा लेना। धन्यवाद
dinigo

26

के साथ includes(), नहीं, लेकिन आप उसी चीज़ को REGEX के माध्यम से प्राप्त कर सकते हैं test():

var value = /hello|hi|howdy/.test(str);

या, यदि शब्द एक गतिशील स्रोत से आ रहे हैं:

var words = array('hello', 'hi', 'howdy');
var value = new RegExp(words.join('|')).test(str);

REGEX दृष्टिकोण एक बेहतर विचार है क्योंकि यह आपको शब्दों को वास्तविक शब्दों के रूप में मेल करने की अनुमति देता है, न कि अन्य शब्दों के सबस्ट्रिंग की । आपको बस शब्द सीमा चिह्न चाहिए \b, इसलिए:

var str = 'hilly';
var value = str.includes('hi'); //true, even though the word 'hi' isn't found
var value = /\bhi\b/.test(str); //false - 'hi' appears but not as its own word

यह काम नहीं करेगा यदि शब्दों में विशेष रेगेक्स वर्ण हों। इसके अलावा, यह ओपी की स्पष्ट आवश्यकता को पूरा नहीं करेगा, यह केवल तभी मेल खाता है जब किसी एक शब्द के साथ मैच हो ।

17

आप भी कुछ ऐसा कर सकते हैं:

const str = "hi, there"

const res = str.includes("hello") || str.includes("hi") || str.includes('howdy');

console.log(res);

जब भी आपका कोई सच लौटाया जाता है, तो मूल्य सही होगा, अन्यथा, यह गलत होने वाला है। यह ES6 के साथ पूरी तरह से ठीक काम करता है।


ओपी ने कहा, "तो केवल अगर एक, और केवल एक ही स्थिति सच है।" आपका स्निपेट एक स्ट्रिंग के लिए सही लौटेगा, जिसमें तीनों शब्द होंगे, जहाँ ओपी यह चाहेगा कि वह झूठी वापसी करे।
डेन ब्रूवर

4

यह ऐरे और रेगेक्स के कुछ / हर तरीकों का उपयोग करके किया जा सकता है ।

यह जाँचने के लिए कि क्या सूची (सरणी) से सभी शब्द स्ट्रिंग में मौजूद हैं:

const multiSearchAnd = (text, searchWords) => (
  searchWords.every((el) => {
    return text.match(new RegExp(el,"i"))
  })
)

multiSearchAnd("Chelsey Dietrich Engineer 2018-12-11 Hire", ["cle", "hire"]) //returns false
multiSearchAnd("Chelsey Dietrich Engineer 2018-12-11 Hire", ["che", "hire"]) //returns true

यह जाँचने के लिए कि क्या सूची (सरणी) से कोई भी शब्द स्ट्रिंग में मौजूद हैं:

const multiSearchOr = (text, searchWords) => (
  searchWords.some((el) => {
    return text.match(new RegExp(el,"i"))
  })
)

multiSearchOr("Chelsey Dietrich Engineer 2018-12-11 Hire", ["che", "hire"]) //returns true
multiSearchOr("Chelsey Dietrich Engineer 2018-12-11 Hire", ["aaa", "hire"]) //returns true
multiSearchOr("Chelsey Dietrich Engineer 2018-12-11 Hire", ["che", "zzzz"]) //returns true
multiSearchOr("Chelsey Dietrich Engineer 2018-12-11 Hire", ["aaa", "1111"]) //returns false

वाह। यह मेरे दोनों सवालों का जवाब दिया। बहुत बहुत शुक्रिया !!!!
बाउंडफ्लोरजी

2

सबसे अच्छा जवाब नहीं और सबसे साफ नहीं है, लेकिन मुझे लगता है कि यह अधिक अनुमत है। जैसे अगर आप अपने सभी चेक के लिए एक ही फिल्टर का उपयोग करना चाहते हैं। वास्तव में .filter()एक ऐरे के साथ काम करता है और एक फिल्टर्ड ऐरे को लौटाता है (जो मुझे बहुत आसान लगता है)।

var str1 = 'hi, how do you do?';
var str2 = 'regular string';
var conditions = ["hello", "hi", "howdy"];

// Solve the problem
var res1 = [str1].filter(data => data.includes(conditions[0]) || data.includes(conditions[1]) || data.includes(conditions[2]));
var res2 = [str2].filter(data => data.includes(conditions[0]) || data.includes(conditions[1]) || data.includes(conditions[2]));

console.log(res1); // ["hi, how do you do?"]
console.log(res2); // []


// More useful in this case
var text = [str1, str2, "hello world"];

// Apply some filters on data
var res3 = text.filter(data => data.includes(conditions[0]) && data.includes(conditions[2]));
// You may use again the same filters for a different check
var res4 = text.filter(data => data.includes(conditions[0]) || data.includes(conditions[1]));

console.log(res3); // []
console.log(res4); // ["hi, how do you do?", "hello world"]

2

यहाँ एक विवादास्पद विकल्प है:

String.prototype.includesOneOf = function(arrayOfStrings) {
  if(!Array.isArray(arrayOfStrings)) {
    throw new Error('includesOneOf only accepts an array')
  }
  return arrayOfStrings.some(str => this.includes(str))
}

आपको ऐसा करने की अनुमति देता है:

'Hi, hope you like this option'.toLowerCase().includesOneOf(["hello", "hi", "howdy"]) // True

1

और एक!

let result

const givenStr = 'A, X' //values separated by comma or space.

const allowed  = ['A', 'B']
const given    = givenStr.split(/[\s,]+/).filter(v => v)

console.log('given (array):', given)

// given contains none or only allowed values:

result = given.reduce((acc, val) => {
  return acc && allowed.includes(val)
}, true)

console.log('given contains none or only allowed values:', result)

// given contains at least one allowed value:

result = given.reduce((acc, val) => {
  return acc || allowed.includes(val)
}, false)

console.log('given contains at least one allowed value:', result)


-1

स्ट्रिंग मूल निवासी का विस्तार:

if (!String.prototype.contains) {
    Object.defineProperty(String.prototype, 'contains', {
        value(patterns) {
            if (!Array.isArray(patterns)) {
                return false;
            }

            let value = 0;
            for (let i = 0; i < patterns.length; i++) {
                const pattern = patterns[i];
                value = value + this.includes(pattern);
            }
            return (value === 1);
        }
    });
}

आपको ऐसा करने की अनुमति देता है:

console.log('Hi, hope you like this option'.toLowerCase().contains(["hello", "hi", "howdy"])); // True

-2

कैसे के बारे में ['hello', 'hi', 'howdy'].includes(str)?


1
नहीं, यह काम नहीं करता है: ['hello', 'hi', 'howdy'].includes('hello, how are you ?')रिटर्न false, जबकि ओपी एक समाधान के लिए पूछ रहा है जो रिटर्न करता है true
बसज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.