2014-01-30 2 views
1

Недавно я много борется с куском кода JavaScript. Код выглядит так:Автоматически генерировать имена в массиве javascript

var bigData = { 
"teams" : [ 
    ["Team 1", "Team 2" ], 
    ["Team 3", "Team 4" ], 
    ["Team 5", "Team 6" ], 
    ["Team 7", "Team 8" ], 
    ["Team 9", "Team 10" ], 
    ["Team 11", "Team 12" ], 
    ["Team 13", "Team 14" ], 
    ["Team 15", "Team 16" ], 
], 
results : [[ /* WINNER BRACKET */ 
    [[1,0], [1,0], [0,3], [2,3], [1,5], [5,3], [7,2], [1,2]], 
    [[1,2], [3,4], [5,6], [7,8]], 
    [[9,1], [8,2]], 
    [[1,3]] 
] 
} 

Как вы могли догадаться, это плагин jquery для турниров. Проблема в том, что я не хочу писать команды вручную, я хочу, чтобы они были написаны автоматически. Я сделал это, и код не работает, потому что цикл while находится внутри переменной (насколько я знаю):

var count = 1; 
var bigData = { 
"teams" : [ 
    while (count <= 8) { 
    ["Team ".count, "Team ".count ], 
    count++; 
    } 

], 
results : [[ /* WINNER BRACKET */ 
    [[1,0], [1,0], [0,3], [2,3], [1,5], [5,3], [7,2], [1,2]], 
    [[1,2], [3,4], [5,6], [7,8]], 
    [[9,1], [8,2]], 
    [[1,3]] 
] 
} 

Это не сработает, и я действительно не знаю, что делать.

ответ

4
var bigData = { 
"teams" : [], 
results : [[ /* WINNER BRACKET */ 
    [[1,0], [1,0], [0,3], [2,3], [1,5], [5,3], [7,2], [1,2]], 
    [[1,2], [3,4], [5,6], [7,8]], 
    [[9,1], [8,2]], 
    [[1,3]] 
]] }; 

for(var i=1 ; i<16 ; i+=2) 
    bigData.teams.push(['Team '+i,'Team '+(i+1)]); 

console.log(JSON.stringify(bigData)); 

В консоли:

{ "команды": [[ "Команда 1", "Команда 2"], [ "Команда 3", "Team 4"], [ "Команда 5 «Команда 6»], [«Команда 7», «Команда 8»], [«Команда 9», «Команда 10»], [«Команда 11», «Команда 12»], [«Команда 13», «Команда 14»], [«Команда 15», «Команда 16»]], «результаты»: [[[[1,0], [1,0], [0,3], [2,3], [1,5], [5,3], [7,2], [1,2]], [[1,2], [3,4], [5,6], [7,8]] , [[9,1], [8,2]], [[1,3]]]]}

+0

Вы, ребята, лучше всего на самом деле, я могу «Скажи, сколько ты сделал для меня! - ТАК, так много для всех вас, хорошо провести день :) – Emil

+0

Хорошо, сэр! - Теперь у меня есть еще один вопрос для вас. Есть ли в любом случае, что я могу передать PHP-код именам команд? – Emil

+0

@ Emil Я уверен, что есть способ - если вы разместите еще один вопрос, я уверен, что вы получите ответы. – Matt

0

Попробуйте это:

var count = 1; 
var data = []; 

while (count <= 16) { 
    data.push(["Team " + (count++).toString(), "Team " + count.toString() ]); 
    count++; 
} 

var bigData = { 
"teams" : data 
} 

Он строит массив, нажимая на него команды. Обратите внимание на конкатенацию счетчика как строки на имя команды, плюс ++ по первому счету, чтобы перевести его в следующую команду (таким образом, создавая команду 1 и команду 2, а не команду 1 и команду 1).

+0

он добавит только 8 команд, а не 16 :) – pwolaq

+0

Да, хороший улов :-) –

+0

также, используя toString() не нужно – pwolaq

0

и код не работает, потому что в то время как петля внутри переменная

Да, вы не можете поставить заявление управления потоком в среде литерала объекта. Вместо этого вам нужно будет начать с пустым массивом, а затем заполнить, что со значениями с помощью заданий (или push):

var teams = []; 
for (var i=1; i<=16;) 
    teams.push(['Team '+i++,'Team '+i++]); 

var bigData = { 
    teams: teams, 
    results: … 
}; 
0

других ответы, предоставленных здесь создать список команд, используя определенное число (8, 16 , без разницы).

Вы можете получить немного нахальные и генерировать список команд отключения команд в реальных результатах, а не, что будет в будущем доказательства вашего сценария против вашего размера лиги расширения. Код тратит большую часть своей жизни на обслуживание, если вы можете потратить всего несколько лишних минут, чтобы сделать ваши вещи более управляемыми данными, вы сэкономите много времени на долгое время.

Поскольку вы используете JQuery, я сварю использование функций в этой библиотеке здесь:

var bigData = { 
    results : [ 
    [ /* WINNER BRACKET */ 
     [[1,0], [1,0], [0,3], [2,3], [1,5], [5,3], [7,2], [1,2]], 
     [[1,2], [3,4], [5,6], [7,8]], 
     [[9,1], [8,2]], 
     [[1,3]] 
    ] 
    ] 
}; 

function flatten(n) { 
    return $.map(n, function(x){ 
    return $.isArray(x) ? flatten(x) : x; 
    }); 
} 

bigData.teams = $.map(
    $.unique(flatten(bigData.results)).sort(), 
    function(num) { return "Team "+num; } 
); 

консоли вывода:

> JSON.stringify(bigData) 
    "{ 
    "results":[[[[1,0],[1,0],[0,3],[2,3],[1,5],[5,3],[7,2],[1,2]],[[1,2],[3,4],[5,6],[7,8]],[[9,1],[8,2]],[[1,3]]]], 
    "teams":["Team 0","Team 1","Team 2","Team 2","Team 2","Team 3","Team 4","Team 5","Team 6","Team 7","Team 8","Team 8","Team 9"] 
    }" 
+0

Эй, там. Спасибо, что подали заявку. Я понимаю, что вы имеете в виду, но не то, что вы набираете: p - Я должен скопировать код, и он будет отображаться (потому что я не могу) - я не знаю, что с ним делать :) – Emil

+0

первый блок должен быть просто заменой кода, который вы указали, как и другие ответы, представленные здесь. Второй блок - это пример вывода из этого приложения в консоль javascript. –

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