将数组推送到多维数组

push array to multidimensional array

我一直在尝试执行以下操作:我制作了一个包含 URL 列表的数组,该列表来自我选择的电子邮件并过滤掉了双打。我想对多维数组中提供者的这些 URL 进行排序。我一直在寻找和尝试不同的方法,但无法让它发挥作用...

我想创建一个多维数组,看起来像 providers[z][y],其中 [z] 包含邮件来源的提供商列表,[y] 是包含 URL 来自 provider[z].

的列表

我尝试以多种方式声明数组提供程序: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] 的长度而不是上面的解决方案 运行s 99 次或直到中断?

希望你能让我再次走上正确的道路,因为这不是我想要的方式而疯狂;)

提前致谢。

欢迎 ProphecyNL。

I want to sort these URL's on provider in a multidimensional array

要对所有提供商的 URL 进行排序,请尝试

providers.forEach(function(urlArr){
   urlArr.sort();
});

获取最大数组的提供商索引

var biggestArrayIndex = -1;
var biggestArrayLength = 0;
providers.forEach(function(value, index){
   if (value.length > biggestArrayLength )
   {
      biggestArrayLength = value.length;
      biggestArrayIndex = index;
   }
})

现在提供商的 index 数组最大为 biggestArrayIndex。您可以通过执行 - providers[biggestArrayIndex]

来获取该数组

这是一个带有单个循环的提案和一个用于分组结果的对象。

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>');