我有像这样的数组的数组。
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
替换数字项。
发布于 2016-11-11 07:27:35
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);
发布于 2016-11-11 07:36:06
您似乎希望根据日期的天数分配排名号,而忽略月份和年份。因此,Jul 01和Jan 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; }
https://stackoverflow.com/questions/40538438
复制相似问题