অনেকটাই অকপট. জাভাস্ক্রিপ্টে, আমাকে পরীক্ষা করতে হবে যে কোনও স্ট্রিংয়ে অ্যারেতে থাকা কোনও সাবস্ট্রিং রয়েছে contains
mapএতটা নয় some। someসাহায্য করবে, কিন্তু আপনি এটি একটি ফাংশন পাস করতে হবে।
অনেকটাই অকপট. জাভাস্ক্রিপ্টে, আমাকে পরীক্ষা করতে হবে যে কোনও স্ট্রিংয়ে অ্যারেতে থাকা কোনও সাবস্ট্রিং রয়েছে contains
mapএতটা নয় some। someসাহায্য করবে, কিন্তু আপনি এটি একটি ফাংশন পাস করতে হবে।
উত্তর:
অন্তর্নির্মিত কিছুই নেই যা এটি আপনার জন্য করবে, আপনাকে এটির জন্য একটি ফাংশন লিখতে হবে।
আপনি যদি জানেন যে স্ট্রিংগুলিতে নিয়মিত প্রকাশের ক্ষেত্রে বিশেষ কোনও অক্ষর না থাকে তবে আপনি কিছুটা এমন প্রতারণা করতে পারেন:
if (new RegExp(substrings.join("|")).test(string)) {
// At least one match
}
... যা একটি নিয়মিত প্রকাশ তৈরি করে যা এটি একটি সিরিজ আপনি যে সাবস্ট্রিংগুলি সন্ধান করছেন (যেমন, one|two) এবং সেগুলির কোনওটির সাথে ম্যাচ আছে কিনা তা পরীক্ষা করে দেখার জন্য বিকল্প তৈরি করে তবে সাবস্ট্রিংগুলিতে যদি কোনও অক্ষর থাকে যা বিশেষ রেজেক্সেসে ( *, [ইত্যাদি), আপনাকে প্রথমে সেগুলি থেকে বাঁচতে হবে এবং তার পরিবর্তে আপনি কেবল বিরক্তিকর লুপটি করা ভাল।
সরাসরি উদাহরণ:
প্রশ্নের এক মন্তব্যে মার্টিনArray.prototype.map ECMAScript5 তে নতুন পদ্ধতি সম্পর্কে জিজ্ঞাসা করেছেন ।mapএতটা সাহায্য নয়, তবে someহ'ল:
if (substrings.some(function(v) { return str.indexOf(v) >= 0; })) {
// There's at least one
}
সরাসরি উদাহরণ:
আপনার কাছে এটি কেবলমাত্র ECMAScript5- অনুবর্তী বাস্তবায়নের মধ্যে রয়েছে, যদিও এটি পলিফিলের পক্ষে ক্ষুদ্র।
2020-এ আপডেট করুন : someউদাহরণটি তীর ফাংশন (ES2015 +) দিয়ে আরও সহজ হতে পারে এবং আপনি এটির includesপরিবর্তে ব্যবহার করতে পারেনindexOf :
if (substrings.some(v => str.includes(v))) {
// There's at least one
}
সরাসরি উদাহরণ:
বা এমনকি bindএটি নিক্ষেপ , যদিও আমার জন্য তীর ফাংশন অনেক বেশি পঠনযোগ্য:
if (substrings.some(str.includes.bind(str))) {
// There's at least one
}
সরাসরি উদাহরণ:
new RegExp(substrings.join("|").replace(/[^\w\s^|]/gi, '')).test(string)।
('disconnect'.indexOf('connect') >= 0) === trueতবে('disconnect' === 'conenct') === false
'disconnect' === 'connect'কিছুই হবে false। এছাড়াও, indexOfঅস্পষ্ট নয়, এটি খুব স্পষ্টভাবে সংজ্ঞাযুক্ত।
indexOf উভয় মিলবে disconnect এবং connectযেখানে আমি অভিজ্ঞতার সাথে দেখা করেছি, এটি দুটি ভিন্ন ক্ষেত্রে আমি শর্তাধীন ফলাফলগুলি ফিরিয়ে দিতে চাই।
এক লাইন সমাধান
substringsArray.some(substring=>yourBigString.includes(substring))
true\falseসাবস্ট্রিং হলে ফিরে আসেexists\does'nt exist
ES6 সমর্থন প্রয়োজন
function containsAny(str, substrings) {
for (var i = 0; i != substrings.length; i++) {
var substring = substrings[i];
if (str.indexOf(substring) != - 1) {
return substring;
}
}
return null;
}
var result = containsAny("defg", ["ab", "cd", "ef"]);
console.log("String was found in substring " + result);
গুগলিং লোকদের জন্য,
এর শক্ত উত্তর হওয়া উচিত।
const substrings = ['connect', 'ready'];
const str = 'disconnect';
if (substrings.some(v => str === v)) {
// Will only return when the `str` is included in the `substrings`
}
var str = "texttexttext";
var arr = ["asd", "ghj", "xtte"];
for (var i = 0, len = arr.length; i < len; ++i) {
if (str.indexOf(arr[i]) != -1) {
// str contains arr[i]
}
}
সম্পাদনা: যদি পরীক্ষার ক্রমটি বিবেচনা না করে তবে আপনি এটি ব্যবহার করতে পারেন (কেবলমাত্র একটি লুপ ভেরিয়েবল সহ):
var str = "texttexttext";
var arr = ["asd", "ghj", "xtte"];
for (var i = arr.length - 1; i >= 0; --i) {
if (str.indexOf(arr[i]) != -1) {
// str contains arr[i]
}
}
lenপরিবর্তনশীল প্রয়োজন নেই , কেবল পরীক্ষা করুন i < arr.length।
যদি অ্যারেটি বড় না হয় তবে আপনি পৃথকভাবে প্রতিটি স্ট্রিংয়ের বিরুদ্ধে স্ট্রিংটি লুপ করতে এবং পরীক্ষা করতে পারেন indexOf()। বিকল্প হিসাবে আপনি সাবস্ট্রিংগুলির সাথে বিকল্প হিসাবে একটি নিয়মিত প্রকাশ তৈরি করতে পারেন যা আরও দক্ষ হতে পারে বা নাও হতে পারে।
অনুসন্ধান স্ট্রিং বা অনুসন্ধানের স্ট্রিংগুলির একটি অ্যারে ব্যবহার করে ট্যাগ বা কীওয়ার্ডগুলির একটি অ্যারে অনুসন্ধান করার জন্য জাভাস্ক্রিপ্ট ফাংশন। ( ES5 কিছু অ্যারে পদ্ধতি এবং ES6 তীর ফাংশন ব্যবহার করে )
// returns true for 1 or more matches, where 'a' is an array and 'b' is a search string or an array of multiple search strings
function contains(a, b) {
// array matches
if (Array.isArray(b)) {
return b.some(x => a.indexOf(x) > -1);
}
// string match
return a.indexOf(b) > -1;
}
ব্যবহারের উদাহরণ:
var a = ["a","b","c","d","e"];
var b = ["a","b"];
if ( contains(a, b) ) {
// 1 or more matches found
}
এমন নয় যে আমি আপনাকে পরামর্শ দিয়েছি যে আপনি গিয়ে Stringপ্রোটোটাইপটি প্রসারিত / প্রসারিত করুন , তবে আমি এটি করেছি:
String.prototype.includes = function (includes) {
console.warn("String.prototype.includes() has been modified.");
return function (searchString, position) {
if (searchString instanceof Array) {
for (var i = 0; i < searchString.length; i++) {
if (includes.call(this, searchString[i], position)) {
return true;
}
}
return false;
} else {
return includes.call(this, searchString, position);
}
}
}(String.prototype.includes);
console.log('"Hello, World!".includes("foo");', "Hello, World!".includes("foo") ); // false
console.log('"Hello, World!".includes(",");', "Hello, World!".includes(",") ); // true
console.log('"Hello, World!".includes(["foo", ","])', "Hello, World!".includes(["foo", ","]) ); // true
console.log('"Hello, World!".includes(["foo", ","], 6)', "Hello, World!".includes(["foo", ","], 6) ); // false
সেরা উত্তর এখানে: এটি ক্ষেত্রেও সংবেদনশীল
var specsFilter = [.....];
var yourString = "......";
//if found a match
if (specsFilter.some((element) => { return new RegExp(element, "ig").test(yourString) })) {
// do something
}
আন্ডারস্কোর.জেএস বা লড্যাশ.জেএস ব্যবহার করে, আপনি স্ট্রিংগুলির একটি অ্যারেতে নিম্নলিখিতটি করতে পারেন:
var contacts = ['Billy Bob', 'John', 'Bill', 'Sarah'];
var filters = ['Bill', 'Sarah'];
contacts = _.filter(contacts, function(contact) {
return _.every(filters, function(filter) { return (contact.indexOf(filter) === -1); });
});
// ['John']
এবং একটি একক স্ট্রিং এ:
var contact = 'Billy';
var filters = ['Bill', 'Sarah'];
_.every(filters, function(filter) { return (contact.indexOf(filter) >= 0); });
// true
এটি সুপার দেরি হয়ে গেছে, তবে আমি কেবল এই সমস্যায় পড়েছি। আমার নিজের প্রকল্পে আমি স্ট্রিংটি অ্যারেতে ছিল কিনা তা পরীক্ষা করতে নিম্নলিখিতটি ব্যবহার করলাম:
["a","b"].includes('a') // true
["a","b"].includes('b') // true
["a","b"].includes('c') // false
এইভাবে আপনি পূর্বনির্ধারিত অ্যারে নিতে পারেন এবং এতে কোনও স্ট্রিং রয়েছে কিনা তা পরীক্ষা করতে পারেন:
var parameters = ['a','b']
parameters.includes('a') // true
টিজে ক্রাউডারের উত্তরে বিল্ডিং
অন্তত সাবস্ট্রিংগুলির মধ্যে একটির "অন্তত একবার" উপস্থিতি পরীক্ষা করার জন্য রেজিপ্লেক্স ব্যবহার করে পালানো।
function buildSearch(substrings) {
return new RegExp(
substrings
.map(function (s) {return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');})
.join('{1,}|') + '{1,}'
);
}
var pattern = buildSearch(['hello','world']);
console.log(pattern.test('hello there'));
console.log(pattern.test('what a wonderful world'));
console.log(pattern.test('my name is ...'));
আপনি যদি ফাঁকা স্থান বা অন্য কোনও সাধারণ চরিত্র দ্বারা পৃথক পূর্ণ "শব্দের" সমন্বিত সাবস্ট্রিংগুলির দীর্ঘ তালিকা নিয়ে কাজ করছেন, আপনি নিজের অনুসন্ধানে কিছুটা চালাক হতে পারেন।
প্রথমে আপনার স্ট্রিংটিকে এক্স, তারপরে এক্স + 1, তারপরে এক্স + 2, ..., ওয়াই পর্যন্ত এক্স ভাগ করে নিন এবং এক্সটি এবং ওয়াইটি আপনার স্ট্রিংয়ে যথাক্রমে কয়েকটি এবং বেশিরভাগ শব্দের সাথে শব্দের সংখ্যা হওয়া উচিত। উদাহরণস্বরূপ, যদি এক্স 1 হয় এবং ওয়াই 4 হয়, "আলফা বিটা গামা ডেল্টা" হয়ে যায়:
"আলফা" "বিটা" "গামা" "ডেল্টা"
"আলফা বিটা" "বিটা গামা" "গামা ডেল্টা"
"আলফা বিটা গামা" "বিটা গামা ডেল্টা"
"আলফা বিটা গামা ডেল্টা"
যদি এক্স 2 এবং Y 3 হয়, তবে আপনি প্রথম এবং শেষ সারিটি বাদ দিতে পারেন।
স্ট্রিং তুলনার তুলনায় অনেক দ্রুত আপনি যদি কোনও সেট (বা মানচিত্র) এ সন্নিবেশ করান তবে এখন আপনি এই তালিকায় দ্রুত অনুসন্ধান করতে পারেন।
খারাপ দিকটি হ'ল আপনি "টা গ্যাম" এর মতো সাবস্ট্রিংগুলি অনুসন্ধান করতে পারবেন না। অবশ্যই আপনি শব্দের পরিবর্তে অক্ষর দ্বারা বিভক্ত হয়ে এর জন্য অনুমতি দিতে পারেন, তবে তারপরে আপনাকে প্রায়শই একটি বিশাল সেট তৈরি করতে হবে এবং সময় / মেমরিটি ব্যয় করার চেয়ে সুবিধাগুলি ছাড়িয়ে যায়।
সম্পূর্ণ সহায়তার জন্য (অতিরিক্তভাবে @ricca এর ভার্শনগুলি )
wordsArray = ['hello', 'to', 'nice', 'day']
yourString = 'Hello. Today is a nice day'.toLowerCase()
result = wordsArray.every(w => yourString.includes(w))
console.log('result:', result)
আপনি এটি চেক করতে পারেন:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
var list = ["bad", "words", "include"]
var sentence = $("#comments_text").val()
$.each(list, function( index, value ) {
if (sentence.indexOf(value) > -1) {
console.log(value)
}
});
});
</script>
</head>
<body>
<input id="comments_text" value="This is a bad, with include test">
</body>
</html>
let obj = [{name : 'amit'},{name : 'arti'},{name : 'sumit'}];
let input = 'it';
ফিল্টার ব্যবহার করুন:
obj.filter((n)=> n.name.trim().toLowerCase().includes(input.trim().toLowerCase()))
map()নতুন এইচটিএমএল 5-জাভাস্ক্রিপ্ট-সংস্করণে কোনও ফাংশন নেই? আমার মনে আছে সেই বিষয়ে কিছু পড়েছি ...