繁体   English   中英

将数组推送到多维数组

[英]push array to multidimensional array

我一直在尝试执行以下操作:我创建一个包含URL列表的数组,从我选择的电子邮件中提取并过滤掉双精度数据。 我想在多维数组中对提供程序上的这些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]);
    }

由于数组提供程序[0] [0]未定义,因此代码似乎在推送后停止。 Thunderbird似乎没有添加providers[pos1] = providers[pos1] || [];的新y数组 providers[pos1] = providers[pos1] || [];

我怎样才能使这段代码工作,所以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>'); 

我想在多维数组中对提供程序上的这些URL进行排序

要对所有提供商的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;
   }
})

现在,提供者的最大数组索引biggestArrayIndex 您可以通过以下方式获取该数组 - providers[biggestArrayIndex]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM