繁体   English   中英

尝试创建一个从数组中提取URL的函数。 的JavaScript

[英]Trying to create a function which extracts a URL from an array. JavaScript

因此,基本上我想创建一个函数,当收到警报时,该函数从数组返回URL(在这种情况下,该数组被声明为“网站”)。 该函数具有两个参数“网站”和“ searchTerm”。

我正在努力使该功能起作用,以便当我在该功能的searchTerm参数中键入yahoo或google或bing时; 我希望它返回相应的URL。

任何帮助或支持,将不胜感激。 抱歉,如果我在解释中没有明确表示自己,如果是这种情况,请告诉我,我将尽力使自己的解释更加清楚。

提前致谢!

尝试更多类似的方法:

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

**根据评论更新**

像这样构建您的网站对象(其中输入是您的键值数组,以竖线字符分隔):

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

}

方法如下:

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];
      }
   }
}

工作实例

您还可以验证和改进功能:

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

为什么不只使用一个对象?

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'

您实际上应该使用类似散列表的结构,这样就不必每次都遍历整个数组。 像这样:

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

我不确定为什么要为此使用数组,因为您真正在做的事情更适合键值对。 但是,这是我的处理方式:

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];
        }
    }
}

但是请考虑是否使用了正确的JavaScript对象:

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()];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM