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”)代码>最好的选择是使用。比我更好的人可能会提供一个很好的模式来使用。从评论队列:我可以请求您在您的答案周围添加更多的上下文。只有代码的答案很难理解。如果你能在你的文章中添加更多的信息,这将有助于询问者和未来的读者。