在模板文字上使用映射

Using maps over template literals

因此,如果给定的字符串包含 [[placeholder:var3]],我需要打印一个布尔值,但是 var3 将从数组中动态输入,如 belwo:

const delmethod = ['all', 'email', 'sms', 'fax', 'voice', 'voicemail', 'pager', 'pagerTwoWay'];
let languages = organizationLocales.map(a => a.locale);
 let variabless = alertDetails.variables?.map(k => k.name); languages && languages.length > 0 && languages.map(lang => { delmethod.map(i => {
 if ( alertDetails.alertMessage?.[${lang}]?.[i]?.variabless?.some(el => [i] === [[placeholder:${el}]]) ) 
{ bodyContainsVariables = true; } }); })

我尝试在模板文字周围使用 map 但它抛出一个错误,也像上面那样尝试过,例如,但它只检查数组的第一个值,所以有人可以帮我解决这个问题,我会很感激任何帮助,提前致谢。

用实际 PS 更新问题。 organizationLocales 是一个数组,alertDetails 是一个具有变量数组的对象,Delmethod 是一个数组用于动态检查不同的属性

您需要在模板字面量中指定索引,因为 variabless 是一个像这样的数组:

console.log(s.includes(`[[placeholder:${variabless[2]}]]`));

希望对你有所帮助

您目前正在传递整个数组

s.includes([[placeholder:${variabless}]])

那是行不通的,您需要指定要将变量数组的哪个元素注入字符串,该字符串的元素索引为 2,因此它应该是这样的

s.includes([[placeholder:${variabless[2]}]])

[[placeholder:${variabless}]] 产生 [[placeholder:var1,var2,var3]]。它不检查第一个变量。这不是应该使用 Array.string.includes 的方式。要检查完全匹配,请使用 === 运算符。

如果您想检查是否有任何数组元素与字符串匹配,您可以使用 Array.prototype.some 方法,其中 returns 一个布尔值。

let any = variabless.some(el => s === `[[placeholder:${el}]]`)

如果要查找与字符串匹配的元素,请使用 Array.prototype.find 函数。

要匹配 variabless 中的 任何 值,您可以针对正则表达式进行测试:

console.log(new RegExp(
   `\[\[placeholder:(${variabless.join('|')})\]\]`
 ).test(s));