从数组Javascript获取数据

从数组Javascript获取数据,javascript,node.js,Javascript,Node.js,我有一个包含不同数据量的数组, 我想用我想要的数据替换数组的周期内容,例如: 周期键0到4之间的数据数组必须包含“2010-10-10” 从键5到键10的数据数组必须包含“2010-11-11” 条件:我需要一个0-4、5-9、10-14(5的倍数)的数据数组 我有以下资料: [      {          "id": "1",          "name": "SUNARTA",          "period":"",      },      {          "id":

我有一个包含不同数据量的数组, 我想用我想要的数据替换数组的周期内容,例如:

  • 周期键0到4之间的数据数组必须包含“
    2010-10-10
  • 从键5到键10的数据数组必须包含“
    2010-11-11
条件:我需要一个0-4、5-9、10-14(5的倍数)的数据数组 我有以下资料:

[
     {
         "id": "1",
         "name": "SUNARTA",
         "period":"",
     },
     {
         "id": "2",
         "name": "AAN",
         "period":"",
     },
     {
         "id": "3",
         "name": "MIKO",
         "period":"",
     },
     {
         "id": "4",
         "name": "NIKA",
         "period":"",
     },
     {
         "id": "5",
         "name": "LALA",
         "period":"",
     },
     {
         "id": "6",
         "name": "MMAAN",
         "period":"",
     },
    {
     "id": "7",
     "name": "NINA",
     "period":"",
 }
]
这是我的代码:

for (var i = 0; i < element.length; i++) {
  var datePeriod = new Date(req.body.start);
  var periode = datePeriod;

  if (i % 5 == 0) {
    datePeriod.setDate(datePeriod.getDate() + 1);
    element[i].periode = periode;

  } else {
    element[i].periode = periode;
  }
}
您可以使用
array#map
并在每5次迭代后基于索引增量日期迭代每个对象,并更新
period
属性

const data=[{“id”:“1”,“name”:“SUNARTA”,“period”:“,”},{“id”:“2”,“name”:“AAN”,“period”:“,”},{“id”:“3”,“name”:“MIKO”,“period”:“,”,”,“,”,“,”,“,”,“,”,“,”,“,”,“,”,“,”,“,”,“,”,“,”,“,“,”,“,”,“,“,”,“,”,“,“,”,“,”,“,“,”,“,“,”,“,”,“,“,”,“,”,“,“,“,,”,
尺寸=5,
起始日期='2010-10-10',
结果=数据.map((o,i)=>{
让指数=数学地板(i/尺寸);
让周期=i==0?新日期(起始日期):
(date=>(新日期(date.setDate(date.getDate()+index)))(新日期(startDate));
period=period.toISOString()子字符串(0,10);
返回{…o,句点};
},[]);

控制台日志(结果)如果要将日期增加为每5项增加一天,则可以执行以下操作:

一个函数,用于获取开始日期和数字(数组索引),并根据数字向开始日期添加天数:

function calcDate(startDate, i) {
  return formatDate(
    new Date(
      new Date(startDate).setDate(
        //add a day every 5 days
        startDate.getDate() + Math.floor(i / 5),
      ),
    ),
  );
}
现在创建一个包含开始日期的变量:
var date=new date()

用于映射必须创建一个新数组的数组,其中使用calculate date函数传递开始日期和当前项索引的结果设置句点:

var result = data.map(function(d, i) {
  return Object.assign({}, d, {
    period: calcDate(date, i),
  });
});
完整代码:

var data=[{“id”:“1”,“name”:“SUNARTA”,“period”:“},{“id”:“2”,“name”:“AAN”,“period”:“},{“id”:“3”,“name”:“MIKO”,“period”:“},{“id”:“NIKA”,“period”:“},{“id”:“5”,“name”:“LALA”,“period”:“},{“id”:“6”,“name”:“MMAAN”,“period”:“},{“id”:“7”,“name”“NINA”,“period”:“}”;
功能板(num){
返回('000'+num).slice(-2);
}
函数格式日期(日期){
返回[
date.getFullYear(),
pad(date.getMonth()+1),
pad(date.getDate()),
]。加入(“-”);
}
功能计算日期(起始日期,i){
返回格式日期(
新日期(
新日期(startDate).设置日期(
//每5天增加一天
startDate.getDate()+数学楼层(i/5),
),
),
);
}
变量日期=新日期();
var result=data.map(函数(d,i){
返回Object.assign({},d{
期间:计算日期(日期,i),
});
});

控制台日志(结果)您非常接近解决方案。您的问题是在每个循环上重新初始化datePeriod。你只需要做一次,然后每5个元素增加一次。因此,将初始化移到for循环之外(并整理一些其他内容):

var元素=[{“id”:“1”,“name”:“SUNARTA”,“period”:“},
{“id”:“2”,“name”:“AAN”,“period”:“},
{“id”:“3”,“name”:“MIKO”,“period”:“},
{“id”:“4”,“name”:“NIKA”,“period”:“},
{“id”:“5”,“name”:“LALA”,“period”:“},
{“id”:“6”,“name”:“MMAAN”,“period”:“},
{“id”:“7”,“name”:“NINA”,“period”:“}];
//帮助设置日期的格式
函数格式化日期(d){
返回`${d.getFullYear()}-${('0'+d.getMonth()).slice(-2)}-${('0'+d.getDate()).slice(-2)}`;
}
//在循环外初始化datePeriod
var datePeriod=新日期();
对于(变量i=0;iconsole.log(element)
那么,你尝试过什么呢?“周期键0到4的数据数组包含“2010-10-10”,但不在你发布的示例数据中。你可以使用
.map()
将谓词作为参数(基本上是一个函数),这样你就可以在其中做一个过滤器(如果e.period==?),然后在那里进行更改。@RobG yes,因为它最初为空,我将在将要创建的条件中填充它,因为数据0-4中的数组数据相同,数据0中的5-9内容不同-4@Izio地图?你是说filter?toISOString返回UTC日期,因此根据主机时区偏移量错误的日期。toISOString返回UTC日期,因此根据主机时区偏移量错误的日期。
var result = data.map(function(d, i) {
  return Object.assign({}, d, {
    period: calcDate(date, i),
  });
});