首页 > 解决方案 > 从数组 Javascript 中获取数据

问题描述

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

条件:我需要一个 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;
  }
}

我想要的数据应该是:

[
 {
     "id": "1",
     "name": "SUNARTA",
     "period":"2010-10-10",
 },
 {
     "id": "2",
     "name": "AAN",
     "period":"2010-10-10",
 },
 {
     "id": "3",
     "name": "MIKO",
     "period":"2010-10-10",
 },
 {
     "id": "4",
     "name": "NIKA",
     "period":"2010-10-10",
 },
 {
     "id": "5",
     "name": "LALA",
     "period":"2010-10-10",
 },
 {
     "id": "6",
     "name": "MMAAN",
     "period":"2011-11-11",
 },
 {
     "id": "7",
     "name": "NINA",
     "period":"2011-11-11",
 },
 ]

标签: javascriptnode.js

解决方案


您可以array#map在每 5 次迭代后根据索引增量日期使用和迭代每个对象并更新period属性。

const data = [ { "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":"", }],
    size = 5,
    startDate = '2010-10-10',
    result = data.map((o,i) => {
      let index = Math.floor(i/size);
      let period = i == 0 ? new Date(startDate) : 
      (date => (new Date(date.setDate(date.getDate() + index))))(new Date(startDate));
      period = period.toISOString().substring(0,10);
      return {...o, period};
    },[]);
console.log(result);


推荐阅读