我一直在尝试执行以下操作:我制作了一个包含 URL 列表的数组,该列表来 self 选择的电子邮件,并进行了双重过滤。我想在多维数组中对提供者的这些 URL 进行排序。我一直在寻找并尝试不同的方法,但无法让它发挥作用......
我想创建一个看起来像 providers[z][y]
的多维数组,其中 [z]
包含邮件来源的提供商列表和 [y]
是包含来自 provider[z]
的 URL 列表的数组。
我尝试以多种方式声明数组提供程序:var providers = [ [], [], [] ];
(还添加了更多括号以确保足够URL 在列表中)、var providers = [];
、var providers = {};
和一些其他变体。
我创建的用于对它们进行排序的代码如下所示:
for (var y = 0; y < urlarray.length; y++) {
var pos1;
provider = urlarray[y].split(".")[1];
if (providers.indexOf(provider) === -1) {
providers.push(provider);
}
pos1 = providers.indexOf(provider);
providers[pos1] = providers[pos1] || []; // should add an array???
providers[pos1].push(urlarray[y]);
}
代码似乎在推送后停止,因为数组 providers[0][0] 未定义。 Thunderbird 似乎没有使用 providers[pos1] = providers[pos1] || 添加新的 y 数组[];
.
我怎样才能让这段代码工作,以便 provider[z][y]
包含来自 provider[z]
的 URL?
作为第二个问题,如果我想获得最大的 [y] 数组,唯一的方法是使用 for
语句来计算所有对象并比较每个提供者,这是最大的数字还是有更短的方法来完成这项工作?例如我将如何做到这一点:
var biggestarray = 0;
for (var a = 0; a < providers.length; a++) {
var counter = 0;
for (var b = 0; b < 99; b++) { // kept it much bigger then needed
if (provider[a][b] != undefined) {
counter = b + 1;
} else break;
}
if (biggestarray < counter) {
biggestarray = counter;
}
}
是否有另一种方法可以让 b
运行到 provider[a][b]
的长度,而不是运行 99 次或直到中断的上述解决方案?
希望你能让我再次走上正确的道路,因为这不是我想要的方式而疯狂;)
提前致谢。
欢迎 ProphecyNL。
最佳答案
这是一个带有单个循环和分组结果对象的提案。
var urlarray = ['http://www.exa.com', 'http://www.example.com', 'http://www.test.org', 'http://www.test.info'],
providers = {},
biggest = [];
urlarray.forEach(function (a, i) {
var provider = a.split(".")[1];
providers[provider] = providers[provider] || [];
providers[provider].push(a);
if (!i || providers[biggest[0]].length < providers[provider].length) {
biggest = [provider];
return;
}
if (providers[biggest[0]].length === providers[provider].length) {
~biggest.indexOf(provider) || biggest.push(provider);
}
});
document.write(biggest);
document.write('<pre>' + JSON.stringify(providers, 0, 4) + '</pre>');
关于javascript - 将数组推送到多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36765743/