我可以在JavaScript中同时循环处理两个对象吗
Can I loop through 2 objects at the same time in JavaScript?
与这个问题有关(有点)。我已经编写了一个脚本,它将循环遍历一个对象,以在引用的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
从searchProviders
对象或socialNetworks
对象传递回一个值。有没有办法让我做到这一点?
编辑:很抱歉,因为没有正确解释。我想做的是,在引用的URL中搜索包含在这两个对象中的字符串。例如,我正在做这样的事情:
var mc_refURL = document.referrer +'';
然后在mc_refURL
中搜索对象中的一个键,例如"google.com"
、"bing.com"
等。9这当前有效(仅适用于一个对象)。所得到的CCD_ 11随后被传递给另一个函数。我需要做的是搜索第二个对象并返回该值。我只是把事情搞得过于复杂了吗?
如果我正确理解你的问题,你有一个变量mc_refURL
,其中包含一些URL。您希望同时搜索searchProviders
和socialNetworks
,以查看该URL是否作为值存在于任一对象中,以及是否希望使用与该URL对应的属性名称调用mc_trackerReport()
函数。
例如,对于mc_refURL === "yahoo.co"
,您要调用mc_trackerReport("yahoo")
,而对于mc_ref_URL === "facebook.co"
,您需要调用mc_trackerReport("facebook")
。
如果两个对象中都出现相同的URL,您不会说该怎么办,所以我假设您想使用先找到的那个。
我不会创建一个具有所有属性的合并对象,因为如果在两个原始对象中出现相同的属性名称,并且每个对象中的URL不同,例如在searchProvider
项目"google" : "google.co"
和socialNetworks
项目"google" : "plus.google.com"
这样的示例中,则会丢失信息。
相反,我建议制作一个包含这两个对象的数组。循环遍历该数组,并在每次迭代时运行原始循环。类似这样的东西:
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;
}
}
}
对象数组方法是有效的,不需要复制属性或任何东西,而且如果您稍后添加另一个URL列表,比如programmingForums
或其他什么,您只需将其添加到数组的末尾。
您可以在循环之前将两个对象合并为一个对象。这里有几种方法:如何动态合并两个JavaScript对象的属性?
var everything = searchProviders;
for (var attrname in socialNetworks) { everything[attrname] = socialNetworks[attrname]; }
for(var mc_u20 in everything) {
// ...
}
for (var i = 0; i < mc_searchProviders.length; i++) {
var searchProvider = mc_searchProviders[i];
var socialNetwork = mc_socialNetworks[i];
if (socialNetwork != undefined) {
// Code.
}
}
还是我误解了什么?
- 正在更新mongod中两个对象内部的数组
- 添加两个对象以获取值的总和
- 如何使用javascript合并两个对象数组
- 在JavaScript中相等两个对象.在更改一时,秒会自动更改
- 如何使用AngularJs比较两个对象的JSON
- 如何在javascript中合并两个对象数组
- JavaScript - 合并两个对象数组并根据属性值删除重复数据
- Javascript如何确定两个对象是否相同
- 比较两个对象数组
- Javascript tests - 如何比较 Jasmine 中的两个对象
- JavaScript:为什么 array.push() 附加两个对象而不是一个对象
- 两个对象相等,但 js 确实说假
- 两个对象之间的Javascript原型
- 使用angularjs或javascript的两个对象数组的交集
- 合并两个对象而不覆盖
- 如何获取具有相同值的两个对象,并将其视为一个对象
- 比较两个对象数组中的重复对象,并在其'这在JavaScript中不是重复的
- 比较underscorejs中的两个对象数组
- 查找/合并具有共同属性的两个对象
- 有没有一个lodash函数可以合并两个对象并删除其中一个对象的属性(如果它们没有)'不存在于另一个中