2017-11-22 188 views
5

tüm kombinasyonunu saklamak ben döndür uzunluğu kez doğru için sol olmalıdır ay dizi var. Tüm döndürme dizisini nesne değişkeninde saklayın. Bunu yapmak için daha etkili bir yol önerebilir misiniz?döndürün dizi ve nesne değişkeni

var Month = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"]; 


Output looks like: 

monthRotate = { 
         rotate1: ["Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec", "Jan"], 
         rotate2: ["Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec", "Jan", "Feb"], 
         . 
         . 
         . 
         . 
         rotate11: ["Dec", "Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov"]; 
      } 

Aşağıdaki yöntemi denedim.

var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; 
 
var rotate = {}; 
 
for (var i=1;i<months.length;i++){ 
 
\t var mts = months.slice(i).concat(months.slice(0,i)); 
 
\t rotate["rotate"+i] = mts; 
 
} 
 

 
console.log(rotate);

+1

ne daha etkilidir? Döngü için en verimli, ama daha verimli olmak hiç dönmüyor ama sadece bir şey kullanmalısınız. Ay [(index + rotate)% 12] ' – Slai

+0

'Array.shift' ve 'Array.concat' yoluyla bağlanmış' Array.unshift 'prototipleri. Lütfen çabanızı gösterin, orada pek göremiyorum ama çıktı. – briosheje

+0

Bir Recursive yönteminin alternatif olabileceğini düşünüyorum. – Sparrow

cevap

2

için verilen array ilk elemanı çıkarmak için shift yöntemi kullanabilir ve ardından dizinin sonundaki itme o.

var months = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"]; 
 
let final = [...Array(months.length-1)].reduce(function(arr){ 
 
    months.push(months.shift()); 
 
    arr.push([...months]); 
 
    return arr; 
 
},[]); 
 
console.log(final);

+1

.reduce ve ES6 kullanarak ilginç bir yaklaşım. Ayrıca, referans sorunları önlemek için yayılan operatörü kullanmak için akıllı bir fikir, aferin! – briosheje

+1

Teşekkürler Alexandar! Bu kod çıktımı almanın daha verimli bir yolu gibi görünüyor. –

1

Bu şekilde her rotations dizi nesne oluşturabilirsiniz:

var Month = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"]; 
var rotations = []; 
for(var i = 0; i < 11; i++){ 
    rotations[i] = []; 
    for(var j = i+1, k = 0; k < 12; j++, k++){ 
     if(j === 12){ 
     j = 0; 
     } 
     rotations[i].push(month[j]); 
    } 
} 

Konsol çıkışı: enter image description here