2017-02-13 45 views
0

我有一个HTML表我试图创建一个函数。我将遍历所有的列名,如果它们包含我的数组中的单词,那么我将相应地将该列值转换为格式化的链接。Javascript测试值数组

function createLink(field, val){ 

    // Create a mapping of our data 
    var output = { 
     'ntid': 'https://example.com/profile/'+val, 
     'email': 'mailTo:' + val 
    }; 

    // Test and return values 
    // pseudo code 

    if(field matches a key partially in output){ 
     return '<a href="'+output[value]+'" target="_blank">'+[val]+'</a>'; 
    }else{ 
     return 'No Matches'; 
    } 

} 

// Examples 
createLink('NTID', 'bob'); // '<a href="https://example.com/profile/bob" target="_blank">bob</a>'; 
createLink('Sup NTID', 'bob'); // '<a href="https://example.com/profile/bob" target="_blank">bob</a>'; 
createLink('Email', '[email protected]'); // '<a href="mailTo:[email protected]" target="_blank">[email protected]</a>'; 
createLink('Sup Email', '[email protected]'); // '<a href="mailTo:[email protected]" target="_blank">[email protected]</a>'; 

我怎么可能去测试值,看它是否有部分匹配在我output数组,然后返回它的格式的链接?

由于这些列名是动态的,可以随时更改,所以我只想测试部分文字而不是确切的字符串。

如果没有匹配,我可以返回一个占位符值,如“不匹配”。

+0

你可以使用的indexOf检查,如果值是在对象。防爆。 if(output.indexOf(string)=== -1) {//不匹配} else {//匹配} 注意。如果您使用对象的键值进行检查,这将不起作用。 –

+0

@ 9focuspoints - 这会告诉我它是否在那里,但是如何直接访问它以获得价值? – SBB

+0

使用表达式与我旗新的RegExp(valueToCheck.replace(/[.?*]/克, “\ $ 1”), “I”) –

回答

1

迭代Object.keys和返回某个键是在“场”的字符串:

function createLink(field, val) { 
 

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

 
    for (var key of Object.keys(output)) 
 
     if (field.toLowerCase().includes(key)) 
 
      return `<a href="${output[key]}" target="_blank">${val}</a>`; 
 

 
    return 'No Matches'; 
 
} 
 

 
// Examples 
 
console.log(createLink('NTID', 'bob')); 
 
console.log(createLink('Sup Email', '[email protected]'));

+0

这对Firefox非常适用,但由于不喜欢''键或'includes()'而导致IE遇到问题。你有可能展示一个全能兼容版本的例子吗? – SBB