2016-11-10 55 views
0

我有像這樣數組的數組。替換成陣列 - 的Javascript

var myArray = [ 
       [Sun Jul 24 2016 17:00:00 GMT-0500 (COT), '2', 'Text Text'], 
       [Sun Jul 12 2016 17:00:00 GMT-0500 (COT), '3', 'Text Text'], 
       [Mon Jul 07 2016 17:00:00 GMT-0500 (COT), '4', 'Text Text'], 
       [Sun Jul 01 2016 17:00:00 GMT-0500 (COT), '1', 'Text Text'], 
       [Sun Jan 01 2016 17:00:00 GMT-0500 (COT), '2', 'Text Text'], 
       [Sun Jan 02 2016 17:00:00 GMT-0500 (COT), '1', 'Text Text'], 
       ]; 

所以,我想根據日期就這樣改變這些陣列的一些項目:提前

var myArray = [ 
      [Sun Jul 24 2016 17:00:00 GMT-0500 (COT), '4', 'Text Text'], 
      [Sun Jul 12 2016 17:00:00 GMT-0500 (COT), '3', 'Text Text'], 
      [Mon Jul 07 2016 17:00:00 GMT-0500 (COT), '2', 'Text Text'], 
      [Sun Jul 01 2016 17:00:00 GMT-0500 (COT), '1', 'Text Text'], 
      [Sun Jan 01 2016 17:00:00 GMT-0500 (COT), '1', 'Text Text'], 
      [Sun Jan 02 2016 17:00:00 GMT-0500 (COT), '2', 'Text Text'], 
         ]; 

感謝。

編輯:

是什麼?:這些好了,這是關於通過更換項目設置陣列的位置到主存儲器陣列的邏輯。

例如。如果哪天開始的月份該數字較低時像1或2,這將增加,如果每月可適當增加的一天。

1月1日將在第二個項目1。

1月2日將是2

1月20日將3

更換數量的項目。

+0

@adeneo我一點差錯。編輯。 – JuanFernandoz

+0

@JeremyJStarcher我不想只是排序變化,但項目值了。 – JuanFernandoz

+0

請閱讀[問]。重要短語:「搜索和研究」和「解釋......阻止你自己解決它的任何困難」。 –

回答

0

var previous_month, position, myArray = [ 
 
    [new Date("Sun Jan 02 2016 17:00:00 GMT-0500 (COT)"), 'x', 'Text Text'], 
 
    [new Date("Mon Jul 07 2016 17:00:00 GMT-0500 (COT)"), 'x', 'Text Text'], 
 
    [new Date("Sun Jul 24 2016 17:00:00 GMT-0500 (COT)"), 'x', 'Text Text'], 
 
    [new Date("Sun Jan 01 2016 17:00:00 GMT-0500 (COT)"), 'x', 'Text Text'], 
 
    [new Date("Sun Jul 12 2016 17:00:00 GMT-0500 (COT)"), 'x', 'Text Text'], 
 
    [new Date("Sun Jul 01 2016 17:00:00 GMT-0500 (COT)"), 'x', 'Text Text'] 
 
]; 
 

 
// Sort the items according to their dates in descending order 
 
myArray.sort(function(a,b){ 
 
    return a[0] < b[0] ? 1 : (a[0] > b[0] ? -1 : 0); 
 
}); 
 

 
// For each item 
 
for(var i=myArray.length-1; i>=0; i--){ 
 
    var item = myArray[i], 
 
     // Get the Year-Month combination 
 
     month = item[0].getFullYear() + '-' + item[0].getMonth(); 
 
    // If it is the same as the previously encountered one 
 
    if(month == previous_month){ 
 
    // Increase position 
 
    position++; 
 
    } else { 
 
    // Otherwise, reset it 
 
    position = 1; 
 
    // Update previous_month 
 
    previous_month = month; 
 
    } 
 
    // Insert it (converted to a String) 
 
    item[1] = '' + position; 
 
} 
 

 
console.log(myArray);

0

看來你要分配基礎上的日期的日數排名數字,月份和年份忽略。因此,無論Jul 01Jan 01也會得到相同的等級(如你的例子)。

因此,讓我們創建一個函數來從你的子陣列中的一個獲得日數:

var day = o => +o[0].split(' ')[2]; 

然後,你不想數組本身進行排序。所以爲此我建議採用數組的淺拷貝(使用擴展運算符),並對其進行排序。然後,當您更新其中一個子數組中的第二個元素時,您仍然會更新原始數組。

下面是代碼:

var myArray = [ 
 
    ['Sun Jul 24 2016 17:00:00 GMT-0500 (COT)', '2', 'Text Text'], 
 
    ['Sun Jul 12 2016 17:00:00 GMT-0500 (COT)', '3', 'Text Text'], 
 
    ['Mon Jul 07 2016 17:00:00 GMT-0500 (COT)', '4', 'Text Text'], 
 
    ['Sun Jul 01 2016 17:00:00 GMT-0500 (COT)', '1', 'Text Text'], 
 
    ['Sun Jan 01 2016 17:00:00 GMT-0500 (COT)', '2', 'Text Text'], 
 
    ['Sun Jan 02 2016 17:00:00 GMT-0500 (COT)', '1', 'Text Text'], 
 
]; 
 
var day = o => +o[0].split(' ')[2]; 
 
[...myArray].sort((a, b) => day(a) - day(b)) 
 
    .reduce((j, o, i, arr) => o[1] = j + +(!i || day(o) !== day(arr[i-1])), 0); 
 

 
console.log(myArray);
.as-console-wrapper { max-height: 100% !important; top: 0; }