2017-11-22 12 views
5

Tôi có mảng tháng cần được xoay còn lại đến phải cho thời lượng dài của nó. Lưu trữ tất cả các mảng quay trong biến đối tượng. Bạn có thể đề nghị cách hiệu quả hơn để làm điều đó không.Xoay mảng và lưu trữ tất cả kết hợp trong biến đối tượng

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"]; 
      } 

Tôi đã thử phương pháp dưới đây.

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

hiệu quả hơn so với những gì? cho vòng lặp sẽ là hiệu quả nhất, nhưng thậm chí hiệu quả hơn là không xoay ở tất cả nhưng chỉ sử dụng một cái gì đó như 'Tháng [(chỉ số + xoay)% 12]' – Slai

+0

Bạn nên sử dụng thông minh của 'Array.shift'and Các nguyên mẫu 'Array.unshift', có thể được liên kết thông qua' Array.concat'. Hãy thể hiện nỗ lực của bạn mặc dù, tôi không thấy nhiều ở đó nhưng đầu ra. – briosheje

+0

Tôi đang nghĩ phương pháp đệ quy sẽ là một cách thay thế – Sparrow

Trả lời

2

Bạn có thể sử dụng phương pháp shift để loại bỏ các yếu tố đầu tiên của array nhất định và sau đó đẩy nó ở phần cuối của mảng .

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

Cách tiếp cận thú vị bằng cách sử dụng .reduce và ES6. Ngoài ra, ý tưởng thông minh để sử dụng các nhà điều hành lây lan để tránh các vấn đề tham khảo, cũng được thực hiện! – briosheje

+1

Cảm ơn Alexandar! Mã này trông giống như cách hiệu quả hơn để có được đầu ra của tôi. –

1

Bạn có thể tạo rotations đối tượng mảng theo cách này:

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]); 
    } 
} 

đầu ra Console: enter image description here

Các vấn đề liên quan