2017-02-13 4 views
0

Ich habe eine HTML-Tabelle, die ich versuche, eine Funktion für. Ich werde alle Spaltennamen durchlaufen, und wenn sie ein Wort enthalten, das in meinem Array ist, werde ich diesen Spaltenwert entsprechend in einen formatierten Link umwandeln.Javascript Test Wert in Array

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>'; 

Wie konnte ich über die Prüfung der Wert gehen, um zu sehen, ob es eine teilweise Übereinstimmung in meinem output Array hat und dann seine formatiert Link zurückzukehren?

Da diese Spaltennamen dynamisch sind und sich jederzeit ändern können, möchte ich nur nach Teilwörtern anstatt nach der exakten Zeichenfolge suchen.

Wenn es keine Übereinstimmung gibt, könnte ich einfach einen Platzhalterwert wie "Keine Übereinstimmung" zurückgeben.

+0

Sie indexOf verwenden könnte der Wert zu überprüfen, ob in dem Objekt ist. Ex. if (output.indexOf (string) === -1) {// Keine Übereinstimmung} sonst {// Übereinstimmung} HINWEIS. Dies funktioniert nicht, wenn Sie die Schlüsselwerte Ihres Objekts überprüfen. –

+0

@ 9focuspoints - Dies würde mir sagen, ob es da drin ist, aber wie würde ich dann würde ich direkt darauf zugreifen, um den Wert zu erhalten? – SBB

+0

Benutze regex mit i flag new RegExp (valueToCheck.replace (/[.?*]/ g, "\ $ 1"), "i") –

Antwort

1

Iterate Object.keys und zurück, wenn ein Schlüssel im "Feld" Zeichenfolge ist:

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

Das funktionierte perfekt für Firefox, hatte aber Probleme mit dem IE, weil es 'key of' oder' includes() 'nicht mochte. Gibt es eine Chance, ein Beispiel für eine allround-kompatible Version zu zeigen? – SBB