javascript - 将数组推送到多维数组

标签 javascript arrays multidimensional-array thunderbird thunderbird-addon

我一直在尝试执行以下操作:我制作了一个包含 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/

相关文章:

javascript - jQuery Ajax 选项 - 我需要建议

arrays - VBA - 通过 Application.Evaluate 的长数组公式

javascript - 使用 ng-repeat 的 AngularJS 嵌套数组

php - 如何在php中发送多维数组post数据?

javascript - 有没有办法在 CSS 或 Jquery 中旋转 JW Player?

javascript - 当我隐藏单选按钮时,星级评分系统无法正确更新

javascript - 源代码可用时如何正确保护密码?

java - 在 Java 中返回通用数组

c - Lua C API : Initializing a variable matrix in a structure C

c++ - 这个二维数组初始化是个坏主意吗?