JavaScript-用于在字符串中查找文本的函数

JavaScript-用于在字符串中查找文本的函数,javascript,arrays,function,Javascript,Arrays,Function,我有一个用于传递表字段名及其值的函数。根据字段的名称,它要么以链接形式返回内容,要么不返回内容 // Given a field name, check to see if its in our output. If so, return the formatted link function createLink(field, val) { var output = { 'ntid': 'https://web.internal/profile/' + val, 'email

我有一个用于传递表字段名及其值的函数。根据字段的名称,它要么以链接形式返回内容,要么不返回内容

// Given a field name, check to see if its in our output. If so, return the formatted link
function createLink(field, val) {

var output = {
    'ntid': 'https://web.internal/profile/' + val,
    'email': 'mailTo:' + val
};

var i, key, keys = Object.keys(output);
for ( i = 0; i < keys.length; ++i ) {
        key = keys[i];
  if(field.toLowerCase() == key){
     return '<a href="'+output[key]+'" target="_blank">'+val+'</a>';
  }
}

return val;
}
//给定字段名,检查其是否在输出中。如果是,请返回格式化的链接
函数createLink(字段,val){
变量输出={
“ntid”:”https://web.internal/profile/“+val,
“email”:“mailTo:”+val
};
变量i,key,keys=Object.keys(输出);
对于(i=0;i
用法:

createLink('email','bob@stuff.com') 
//返回

这也适用于
NTID
。但我遇到的问题是,有些字段名在输出中包含我的值,例如
Sup-Email
Sup-NTID
,这些字段名没有正确转换

预期结果:

createLink('sup email','bob2@stuff2.com') 
//返回

问题:

如何调整函数以查看输出数组中是否存在我的
字段
,即使它不完全匹配?

您可以使用

indexOf()方法返回指定值第一次出现的调用字符串对象内的索引…如果找不到该值,则返回-1

因此,您的代码将如下所示:

// Given a field name, check to see if its in our output. If so, return the formatted link
function createLink(field, val) {

var output = {
    'ntid': 'https://web.internal/profile/' + val,
    'email': 'mailTo:' + val
};

var i, key, keys = Object.keys(output);
for ( i = 0; i < keys.length; ++i ) {
        key = keys[i];
  if(field.toLowerCase().indexOf(key) >= 0){ //CHANGE HERE
     return '<a href="'+output[key]+'" target="_blank">'+val+'</a>';
  }
}

return val;
}
//给定字段名,检查其是否在输出中。如果是,请返回格式化的链接
函数createLink(字段,val){
变量输出={
“ntid”:”https://web.internal/profile/“+val,
“email”:“mailTo:”+val
};
变量i,key,keys=Object.keys(输出);
对于(i=0;i=0){//在此处更改
返回“”;
}
}
返回val;
}

将功能更改为

函数createLink(字段,val){
变量输出={
“ntid”:”https://web.internal/profile/“+val,
“email”:“mailTo:”+val
};
变量i,key,keys=Object.keys(输出);
对于(i=0;i日志(createLink('sup email','bob2@stuff2.com)
您正在实现的是。策略模式依赖于某种形式的行为转换,这取决于方法的输入。在您的例子中,这种转换是基于第一个参数的

你不想做的是你的问题问你怎么做。您不希望假定应用程序中包含“email”或其他字符串的每个字段名都保证是电子邮件地址,并采用相同的策略进行处理

创建一个字段名称和策略表,用于显示每个字段;并使用“enum ish”对象作为策略的定义

函数创建链接(字段,val){
const strategy=create_link.Field_strategys[Field];
如果(策略类型==‘未定义’){
log(“使用默认策略”);
返回val;
}
console.log(“使用”+策略);
开关(策略){
案例创建_link.Strategies.EMAIL:
返回“”;
案例创建_link.Strategies.NTID:
返回“”;
案例创建链接策略部分字段:
返回“”;
}
}
创建链接。策略={
电子邮件:“电子邮件策略”,
NTID:“NTID战略”,
一些领域:“一些领域战略”
};
创建链接字段策略={
“Sup电子邮件”:创建链接.Strategies.email,
“电子邮件”:创建链接.Strategies.EMAIL,
“电子邮件”:创建链接.Strategies.Email,
“NTID”:创建链接.Strategies.NTID,
“Foobar baz”:创建链接、策略、某些字段
};
log(创建链接(“foo”,“fooofoo”);
日志(创建链接(“支持电子邮件”)supervisor@example.com"));
日志(创建链接(“电子邮件”)foo@example.com"));
日志(创建链接(“电子邮件”)bar@example.com"));
日志(创建链接(“NTID”,“10983409509734”);
log(创建链接(“foobarbaz”、“Aleph null”)最好的选择是使用。比我更好的人可能会提供一个很好的模式来使用。从评论队列:我可以请求您在您的答案周围添加更多的上下文。只有代码的答案很难理解。如果你能在你的文章中添加更多的信息,这将有助于询问者和未来的读者。