জাভাস্ক্রিপ্ট জন্য একাধিক শর্ত। (অন্তর্ভুক্ত) পদ্ধতি


95

কেবল অবাক হচ্ছেন, একটি অন্তর্ভুক্ত পদ্ধতিতে একাধিক শর্ত যুক্ত করার উপায় আছে কি উদাহরণস্বরূপ:

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

"বা" কমাতে রাজ্যের কল্পনা করুন।

এটি এখন জিজ্ঞাসা করছে যে স্ট্রিংটিতে হ্যালো, হাই বা হাইডি রয়েছে কিনা । সুতরাং শুধুমাত্র যদি এক, এবং শর্তগুলির একমাত্র সত্য।

এটা করার কোন পদ্ধতি আছে কি?


4
orঅন্তত একটি ম্যাচ যথেষ্ট হবে তা বোঝায় ।
রবার্টক্লেপ

পদ্ধতির অন্তর্ভুক্ত সহ সমাধানটি সন্ধান করার পরিবর্তে আপনি ['hello', 'hi', 'howdy'].indexOf(str)
সূচকটি এর

উত্তর:


29

এটি একটিকে কার্যকর করা উচিত, এবং শর্তগুলির মধ্যে কেবল একটিই সত্য:

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));

শুধু একটি নোট. গুগল অ্যাপস স্ক্রিপ্টে যে কেউ এই চেষ্টা করে যাবেন যে কোনও টাইপ এরর
কুর্ট লিডলি

193

আপনি ব্যবহার করতে পারেন .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);


4
নোটের পয়েন্ট: some()একটি পদ্ধতি, অপারেটর নয়। অন্যথায়, ভাল উত্তর।
মিত্যা

পয়েন্ট নেওয়া হয়েছে। আপনাকে ধন্যবাদ
ডিনিগো

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);

আরইজিইএক্স পদ্ধতির একটি ভাল ধারণা কারণ এটি আপনাকে শব্দের সাথে অন্য শব্দের সাবস্ট্রিং নয় বরং প্রকৃত শব্দ হিসাবে মেলাতে দেয় । আপনার কেবল সীমানা চিহ্নিতকারী শব্দের প্রয়োজন \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

শব্দগুলিতে বিশেষ regexp অক্ষর থাকলে এটি কাজ করবে না। এছাড়াও, এই ওপি এর আপাত প্রয়োজনীয়তা সন্তুষ্ট করা হবে না এটি মেলে থাকলে তবেই সাথে একটি খেলায় এর একক শব্দ।

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

-1

কীভাবে ['hello', 'hi', 'howdy'].includes(str)?


4
না, এটি কাজ করে না: ['hello', 'hi', 'howdy'].includes('hello, how are you ?')ফেরত দেয় false, যেখানে ওপি এমন সমাধানের জন্য বলছে যা প্রত্যাবর্তন করে true
বাসজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.