3

Я пытаюсь сделать следующее: я создаю массив, содержащий список URL-адресов, исходя из выбранных вами электронных писем и отпадает. Я хочу сортировать эти URL-адреса поставщика в многомерном массиве. Я искал и пробовать разные подходы, но не могу заставить его работать ...push массив для многомерного массива

Я хочу создать многомерный массив, который выглядит как 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]); 
    } 

код, кажется, останавливается после толчка, так как поставщики массива [0] [0] не определено. Thunderbird, похоже, не добавляет новый массив y с providers[pos1] = providers[pos1] || [];.

Как я могу заставить этот код работать, поэтому provider[z][y] содержит URL-адреса от provider[z]?

И как второй вопрос, если я хочу получить самый большой массив [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 раз или до перерыва?

Надеется, что вы можете получить меня на правильном пути снова, сходить с умом от этого не работает, как я хочу;)

Спасибо заранее.

Greet ProphecyNL.

+0

у вас есть некоторые примеры ваших данных? –

+1

Да, я передаю все выбранные письма и сохраняю привязки, которые я ищу для массива 'urlarray', который выглядит как' var urlarray = ['url1', 'url2' и т. Д.] '. Я хочу получить к ним доступ, например, «провайдеры [провайдер] [url]», если это возможно. – ProphecyNL

+0

спасибо, но вы не можете разделить 'url1'. похоже ли это на 'example.com'? –

ответ

1

Это предложение с одним циклом и объектом для сгруппированного результата.

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

+0

Thanx, но кажется, что mozilla thunderbird не хочет правильно выполнять код ... Я использовал TB 38.xxx и обновил до 45, но все равно ничего. – ProphecyNL

+0

работает в ie11, край и хром. ff, не знаю. Кстати, это es 5 –

+1

Хорошо, это работает ... глупая ошибка, потому что я читал 'провайдеров [0] [0]' вместо 'поставщиков ['providerA'] [0]'. Это была ошибка, которую я делал все время, я слишком долго не программировал;) Thanx для вашей помощи !!! :) – ProphecyNL

0

Я хочу, чтобы отсортировать 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; 
    } 
}) 

В настоящее время inde x с самым большим массивом - biggestArrayIndex. Вы можете получить этот массив - providers[biggestArrayIndex]

Смежные вопросы