在javascript数组中自动生成名称

时间:2014-01-30 23:35:33

标签: javascript jquery

最近我用一段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 个答案:

答案 0 :(得分: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”,“团队4”],[“团队5”,“团队6”],[“团队7” ,“Team 8”,[“Team 9”,“Team 10”],[“Team 11”,“Team 12”],[“Team 13”,“Team 14”],[“Team 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]]]]}

答案 1 :(得分:0)

试试这个:

var count = 1;
var data = [];

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

var bigData = {
"teams" : data
}

通过推动团队进入它来构建阵列。请注意count作为字符串与队名的串联,加上第一次计数的++,将其迭代到下一个团队(从而产生团队1和团队2,而不是团队1和团队1)。

答案 2 :(得分:0)

  

并且代码不起作用,因为while循环在变量

是的,您不能将控制流语句放在对象文字中间。相反,您需要从一个空数组开始,然后通过赋值(或push)填充值:

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

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

答案 3 :(得分: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"]
   }"