与this问题相关(有点)。我编写了一个脚本,它将遍历一个对象以在引用URL中搜索某个字符串。对象如下:
var searchProviders = {
"google": "google.com",
"bing": "bing.com",
"msn": "search.msn",
"yahoo": "yahoo.co",
"mywebsearch": "mywebsearch.com",
"aol": "search.aol.co",
"baidu": "baidu.co",
"yandex": "yandex.com"
};
我用来循环的for..in
循环是:
for (var mc_u20 in mc_searchProviders && mc_socialNetworks) {
if(!mc_searchProviders.hasOwnProperty(mc_u20)) {continue;}
var mc_URL = mc_searchProviders[mc_u20];
if (mc_refURL.search(mc_URL) != -1) {
mc_trackerReport(mc_u20);
return false;
}
现在我有另一个对象让我们称之为socialNetworks
,它具有以下结构:
var socialNetworks = {"facebook" : "facebook.co" }
我的问题是,我可以只使用一个函数来遍历这两个对象吗?我问的原因是你可以看到的变量mc_u20
被传递回mc_trackerReport
函数,我需要的是让mc_u20
从{{1}传回一个值对象或来自searchProviders
对象。有没有办法可以做到这一点?
编辑:道歉,因为没有正确解释。我想要做的是,在引用URL中搜索包含在2个对象中的字符串中的字符串。所以我举例说:
socialNetworks
然后在var mc_refURL = document.referrer +'';
中搜索对象中的一个键,例如mc_refURL
,"google.com"
等.9这目前有效(仅针对一个对象)。然后将生成的"bing.com"
传递给另一个函数。我需要做的是搜索第二个对象并返回该值。我只是过于复杂化了吗?
答案 0 :(得分:1)
您可以在循环之前将两个对象合并为一个。这里有几种方法: How can I merge properties of two JavaScript objects dynamically?
var everything = searchProviders;
for (var attrname in socialNetworks) { everything[attrname] = socialNetworks[attrname]; }
for(var mc_u20 in everything) {
// ...
}
答案 1 :(得分:1)
如果我正确理解您的问题,您的变量mc_refURL
包含一些网址。您希望搜索searchProviders
和socialNetworks
以查看该URL是否作为任一对象中的值存在,如果存在,您想要使用属性名称调用mc_trackerReport()
函数使用该URL。
,例如,mc_refURL === "yahoo.co"
您想要致电mc_trackerReport("yahoo")
,而mc_ref_URL === "facebook.co"
则要致电mc_trackerReport("facebook")
。
如果两个对象中都出现相同的网址,您就不会说该怎么办,所以我假设您要使用先找到的网址。
我不会创建包含所有属性的单个合并对象,因为如果在每个对象中具有不同URL的两个原始对象中出现相同的属性名称,则会丢失信息,例如像{{1}这样的示例项searchProvider
和"google" : "google.co"
项socialNetworks
。
相反,我建议制作一个包含两个对象的数组。循环遍历该数组,并在每次迭代时运行原始循环。像这样:
"google" : "plus.google.com"
对象数组的方法是高效的,没有复制属性或任何东西,如果你以后添加另一个URL列表,比如说var urlLists = [
mc_searchProviders,
mc_socialNetworks
],
i,
mc_u20;
for (i = 0; i < urlLists.length; i++) {
for (mc_u20 in urlLists[i]) {
if(!urlLists[i].hasOwnProperty(mc_u20))
continue;
if (mc_refURL.search(urlLists[i][mc_u20]) != -1) {
mc_trackerReport(mc_u20);
return false;
}
}
}
或者你只需将它添加到数组的末尾。< / p>
答案 2 :(得分:0)
for (var i = 0; i < mc_searchProviders.length; i++) {
var searchProvider = mc_searchProviders[i];
var socialNetwork = mc_socialNetworks[i];
if (socialNetwork != undefined) {
// Code.
}
}
或者我是否会误解某些事情?