我可以在JavaScript中同时遍历2个对象吗?

时间:2012-01-26 09:47:56

标签: javascript object loops

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"传递给另一个函数。我需要做的是搜索第二个对象并返回该值。我只是过于复杂化了吗?

3 个答案:

答案 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包含一些网址。您希望搜索searchProviderssocialNetworks以查看该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.
    }
}

或者我是否会误解某些事情?

相关问题