首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >替换为数组- Javascript

替换为数组- Javascript
EN

Stack Overflow用户
提问于 2016-11-11 06:54:12
回答 2查看 70关注 0票数 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'],
              ];

因此,我想根据日期更改这些数组中的一些项,如下所示:

代码语言:javascript
运行
复制
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

替换数字项。

EN

回答 2

Stack Overflow用户

发布于 2016-11-11 07:27:35

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2016-11-11 07:36:06

您似乎希望根据日期的天数分配排名号,而忽略月份和年份。因此,Jul 01Jan 01将获得相同的排名(如您的示例所示)。

因此,让我们创建一个函数来从您拥有的一个子数组中获取天数:

代码语言:javascript
运行
复制
var day = o => +o[0].split(' ')[2];

然后,您不想对数组本身进行排序。因此,我建议使用数组的浅表副本(使用扩展运算符),并对其进行排序。然后,当您更新其中一个子数组中的第二个元素时,仍将更新原始数组。

代码如下:

代码语言: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 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);
代码语言:javascript
运行
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40538438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档