Hanya ingin tahu, apakah ada cara untuk menambahkan beberapa kondisi ke metode .includes, misalnya:
var value = str.includes("hello", "hi", "howdy");
Bayangkan tanda koma "atau".
Ini menanyakan sekarang apakah string berisi halo, hai atau apa kabar. Jadi hanya jika satu, dan hanya satu syarat yang benar.
Apakah ada metode untuk melakukan itu?
javascript
methods
pengguna6234002
sumber
sumber
or
akan menyiratkan bahwa setidaknya satu pertandingan sudah cukup.['hello', 'hi', 'howdy'].indexOf(str)
Jawaban:
Itu harus berfungsi bahkan jika satu, dan hanya satu dari ketentuan yang benar:
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));
sumber
Anda dapat menggunakan
.some
metode yang dirujuk di sini .// 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);
sumber
some()
adalah metode, bukan operator. Jika tidak, jawaban yang bagus.Dengan
includes()
, tidak, tetapi Anda dapat mencapai hal yang sama dengan REGEX melaluitest()
:var value = /hello|hi|howdy/.test(str);
Atau, jika kata-kata tersebut berasal dari sumber dinamis:
var words = array('hello', 'hi', 'howdy'); var value = new RegExp(words.join('|')).test(str);
Pendekatan REGEX adalah ide yang lebih baik karena memungkinkan Anda untuk mencocokkan kata sebagai kata sebenarnya, bukan substring dari kata lain . Anda hanya membutuhkan penanda batas kata
\b
, jadi: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
sumber
Anda juga bisa melakukan sesuatu seperti ini:
const str = "hi, there" const res = str.includes("hello") || str.includes("hi") || str.includes('howdy'); console.log(res);
Setiap kali salah satu penyertaan Anda mengembalikan benar, nilainya akan menjadi benar, jika tidak, itu akan menjadi salah. Ini bekerja dengan baik dengan ES6.
sumber
Itu bisa dilakukan dengan menggunakan beberapa / setiap metode Array dan RegEx.
Untuk memeriksa apakah SEMUA kata dari daftar (larik) ada dalam string:
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
Untuk memeriksa apakah SALAH SATU kata dari daftar (larik) ada dalam string:
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
sumber
Bukan jawaban terbaik dan bukan yang terbersih, tapi menurut saya itu lebih permisif. Seperti jika Anda ingin menggunakan filter yang sama untuk semua pemeriksaan Anda. Sebenarnya
.filter()
bekerja dengan array dan mengembalikan array yang difilter (yang menurut saya lebih mudah digunakan juga).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"]
sumber
Inilah opsi kontroversial :
String.prototype.includesOneOf = function(arrayOfStrings) { if(!Array.isArray(arrayOfStrings)) { throw new Error('includesOneOf only accepts an array') } return arrayOfStrings.some(str => this.includes(str)) }
Memungkinkan Anda melakukan hal-hal seperti:
'Hi, hope you like this option'.toLowerCase().includesOneOf(["hello", "hi", "howdy"]) // True
sumber
Yang lainnya!
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)
sumber
Memperluas prototipe asli String:
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); } }); }
Memungkinkan Anda melakukan hal-hal seperti:
console.log('Hi, hope you like this option'.toLowerCase().contains(["hello", "hi", "howdy"])); // True
sumber
Bagaimana dengan
['hello', 'hi', 'howdy'].includes(str)
?sumber
['hello', 'hi', 'howdy'].includes('hello, how are you ?')
kembalifalse
, sedangkan OP meminta solusi yang kembalitrue
.