2012-02-20 50 views
1

我有20個RGB顏色值的Javascript數組,看起來像這樣:從大型數組中返回均勻「間隔」數量的索引。

defaultColors: [ rgb(58, 185, 180)','rgb(63, 186, 172)','rgb(71, 185, 159)','rgb(80, 185, 146)','rgb(90, 186, 132)','rgb(103, 187, 119)','rgb(117, 188, 104)','rgb(137, 193, 96)','rgb(163, 200, 90)','rgb(189, 206, 87)','rgb(212, 214, 86)','rgb(232, 219, 87)','rgb(245, 221, 89)','rgb(254, 221, 87)','rgb(254, 216, 83)','rgb(254, 206, 78)', 'rgb(253, 193, 72)','rgb(251, 178, 66)','rgb(244, 163, 63)','rgb(240, 150, 60)'] 

在任何給定的時間我可能只需要,也就是說,這些顏色的7,但我想從全譜拉顏色。我不只是想要前7種顏色。我需要更多的東西是這樣的:

enter image description here

或者說我需要10種顏色。這看起來會是這樣的:圍繞着如何退出這個功能

enter image description here

建議?

+0

有一件事我注意到的是,你在數組中的第一種顏色之前缺少一個單引號。除此之外,這是你可以用for循環做什麼的嗎?你可以改變循環索引的增量值,所以它只抓取數組中的每一個第n項... – 2012-02-20 17:19:01

回答

0

當需要7,間隔均勻,Math.ceil(20/7)= 3,因此可以這樣做:

var chosenColors = []; 
for(var i =0; i<20 && chosenColors.length<7; i+=3) chosenColors.push(defaultColors[i]); 

當需要10,均勻地間隔開,Math.ceil( 20/10)= 2,所以你可以做:

var chosenColors = []; 
for(var i =0; i<20 && chosenColors.length<10; i+=2) chosenColors.push(defaultColors[i]); 
0
var defaultColors= [ 'rgb(58, 185, 180)','rgb(63, 186, 172)','rgb(71, 185, 159)','rgb(80, 185, 146)','rgb(90, 186, 132)','rgb(103, 187, 119)','rgb(117, 188, 104)','rgb(137, 193, 96)','rgb(163, 200, 90)','rgb(189, 206, 87)','rgb(212, 214, 86)','rgb(232, 219, 87)','rgb(245, 221, 89)','rgb(254, 221, 87)','rgb(254, 216, 83)','rgb(254, 206, 78)', 'rgb(253, 193, 72)','rgb(251, 178, 66)','rgb(244, 163, 63)','rgb(240, 150, 60)']; 

var need = 10; 


for (var i=0, every=defaultColors.length/need|0;i<defaultColors.length;i+=every) { 
    console.log(defaultColors[i]); 
} 
0
// pick n elements from a, distibuted evenly 
pickn = function(a, n) { 
    var p = Math.floor(a.length/n) 
    return a.slice(0, p * n).filter(function(_, i) { 
     return 0 == i % p 
    }) 
} 

// test 

test = [0,11,22,33,44,55,66,77,88,99,111,222,333,444,555,666,777,888,999] 
for (i = 1; i < test.length; i++) 
    console.log(i, pickn(test, i))