2017-02-13 76 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