JavaScript:循环一个数组(而不是pop)?

时间:2010-12-29 20:36:27

标签: javascript

我正在创建地图标记,我想为地图上的每个县分配不同的颜色。

我事先并不知道地图上会显示多少县,所以我需要想办法分配无限数量的颜色。

目前,我正在使用以下代码为每个县分配一种颜色,但是当我pop()列表太多次时,我遇到了问题:

var colours = ['6183A6', '3A66A7', '3B4990', '5B59BA'];
var h_colours = []; // associative array 
function addMarker(county, colour) {
if (colour==undefined) {
    if (h_colours[hundred]==undefined) {
            h_colours[hundred] = colours.pop();
    } } }

有没有办法在不实际删除项目的情况下循环浏览列表,并在结束时从列表的开头继续?

谢谢!

2 个答案:

答案 0 :(得分:8)

 var getNextColour = (function() {
   var colours = ['6183A6', '3A66A7', '3B4990', '5B59BA'];
   var cc = 0;
   return function() {
     var rv = colours[cc];
     cc = (cc + 1) % colours.length;
     return rv;
   };
 })();

现在你可以说:

 if (colour == undefined) colour = getNextColour();

或只是

 colour = colour || getNextColour();

当然,将颜色应用于地图的元素,使得不对相邻颜色的相邻区域进行着色是一个非常有趣的问题。

答案 1 :(得分:1)

您可以在数组中使用索引作为索引。

每当您获取颜色时递增,当它是数组-1的大小时将其重置为0.