Donc, fondamentalement, je voudrais créer une fonction qui, lorsqu'elle est alertée, renvoie l'URL d'un tableau (dans ce cas, le tableau est déclaré en tant que «sites Web»). La fonction a deux paramètres «sites Web» et «searchTerm».

J'ai du mal à faire en sorte que la fonction se comporte, de sorte que lorsque je tape yahoo ou google ou bing dans le paramètre searchTerm de la fonction; Je veux qu'il renvoie l'URL correspondante.

Toute aide ou soutien serait grandement apprécié. Désolé si je n'ai pas été clair dans mon explication, si c'est le cas, faites-le moi savoir et je vais essayer d'être plus clair dans mon explication.

Merci d'avance!

0
user1038065 9 nov. 2011 à 21:48

5 réponses

Meilleure réponse

Voici comment:

var websites = ["www.google.com|Google" , "www.yahoo.com|Yahoo" , "www.bing.com|Bing"];

function filterURL(websites,searchTerm) 
{
   for (var i = 0; i < websites.length; i++) {
      if (websites[i].split('|')[1] === searchTerm) {
         return websites[i].split('|')[0];
      }
   }
}

Exemple de travail

Vous pouvez également valider et améliorer la fonction:

function filterURL(websites,searchTerm) 
{
   if (typeof websites != 'Array' || ! searchTerm) return false;

   for (var i = 0; i < websites.length; i++) {
      if (websites[i].split('|')[1] === searchTerm) {
         return websites[i].split('|')[0];
      }
   }

   return false;
}
1
Sarfraz 9 nov. 2011 à 17:57

Je ne sais pas pourquoi vous souhaitez utiliser un tableau pour cela, car ce que vous faites correspond mieux à une paire clé-valeur; cependant, voici comment je le ferais:

function filterURL(websites, searchTerm) {
    var i = 0,
        parts;
    for (i = 0; i < websites.length; i++) {
        parts = websites[i].split("|");
        if (parts[1].toLowerCase() === searchTerm) {
            return parts[0];
        }
    }
}

Mais considérez si vous avez utilisé un objet JavaScript approprié à la place:

var websites = {
    Google: "www.google.com",
    Yahoo: "www.yahoo.com",
    Bing: "www.bing.com"
}
// Now it's much simpler:
function filterURL(websites, searchTerm) {
    // key has first letter capitalized…
    return websites[searchTerm.charAt(0).toUpperCase() + searchTerm.slice(1).toLowerCase()];
}
0
kojiro 9 nov. 2011 à 17:57

Pourquoi ne pas simplement utiliser un objet?

var websites = {
    Google: 'www.google.com',
    Yahoo: 'www.yahoo.com'
};

function filterURL(sites, searchTerm) {
    if (sites[searchTerm]) {
        return sites[searchTerm];
    } else {
        // What do you want to do when it can't be found?
    }
}

alert(filterURL(websites, 'Google')); // alerts 'www.google.com'
0
sdleihssirhc 9 nov. 2011 à 17:51

Vous devriez vraiment utiliser une structure semblable à une table de hachage afin de ne pas avoir à parcourir le tableau entier à chaque fois. Quelque chose comme ça:

var websites = {
    "Google": "www.google.com",
    "Yahoo": "www.yahoo.com",
    "Bing": "www.bing.com"
};
function filterURL(websites, searchTerm) {
    if (websites[searchTerm] !== undefined)
        return websites[searchTerm];
    else
        return null;
}
0
Ben 9 nov. 2011 à 17:53

Essayez quelque chose de plus comme:

var websites = {google: 'www.google.com', yahoo: 'www.yahoo.com'};
function filterURL(websites,searchTerm) 
{
    return websites[searchTerm] || 'www.defaultsearchwebstirehere.com';
}

** Mettre à jour le commentaire suivant **

Construisez votre objet de sites Web comme ceci (où l'entrée est votre tableau de valeurs clés séparées par des caractères de canal):

var websites = {};
for (var i = 0; i < input.length; i++) {
  var siteToSearchTerm = input[i].split('|');
  websites[siteToSearchTerm[1]] = siteToSearchTerm[0];

}

2
Rich O'Kelly 9 nov. 2011 à 18:12
8069254