首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Array Javascript获取数据

从Array Javascript获取数据
EN

Stack Overflow用户
提问于 2018-11-22 09:19:40
回答 3查看 242关注 0票数 1

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

  • 期间键0到4的数据数组必须包含"2010-10-10“。
  • 键5至10期间的数据数组必须包含"2010-11-11

条件:我需要从0-4,5-9,10-14 (5的倍数)的数据数组,我有以下数据:

代码语言:javascript
复制
[
     {
         "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":"",
 }
]

这是我的密码:

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

我想要的数据应该是:

代码语言:javascript
复制
[
 {
     "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",
 },
 ]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-22 22:30:29

你离解决方案很近了。您的问题是在每个循环上重新初始化datePeriod。您只需要这样做一次,然后在第五个元素上增加它。因此,将初始化移到for循环之外(并整理一些其他内容):

代码语言:javascript
复制
var element = [{"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": ""}];

// Helper to format the date
function formatDate(d) {
  return `${d.getFullYear()}-${('0'+d.getMonth()).slice(-2)}-${('0'+d.getDate()).slice(-2)}`;
}

// Initialise datePeriod outside the loop
var datePeriod = new Date();

for (var i = 0; i < element.length; i++) {
  // This variable is unnecessary
  //var periode = datePeriod;

  // Increment datePeriod every 5th element
  // The else loop isn't necessary
  if (i && i % 5 == 0) {
    datePeriod.setDate(datePeriod.getDate() + 1);
  }
  element[i].period = formatDate(datePeriod);
}

console.log(element)

这只会创建一个Date对象,因此它将是相当有效的。

票数 1
EN

Stack Overflow用户

发布于 2018-11-22 09:32:12

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

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

票数 1
EN

Stack Overflow用户

发布于 2018-11-22 10:04:36

如果要增加日期,每5项增加一天,则可以执行以下操作:

一个函数,它接受开始日期和数字(数组的索引),并根据数字将天数添加到开始日期:

代码语言:javascript
复制
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();

使用Array.prototype.map映射数组,您必须创建一个新的数组,其中设置句点,其中包含在开始日期中传递的计算日期函数的结果和当前项的索引:

代码语言:javascript
复制
var result = data.map(function(d, i) {
  return Object.assign({}, d, {
    period: calcDate(date, i),
  });
});

完整代码:

代码语言:javascript
复制
var 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":""}];

function pad(num) {
  return ('000' + num).slice(-2);
}
function formatDate(date) {
  return [
    date.getFullYear(),
    pad(date.getMonth() + 1),
    pad(date.getDate()),
  ].join('-');
}
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();
var result = data.map(function(d, i) {
  return Object.assign({}, d, {
    period: calcDate(date, i),
  });
});
console.log(result);

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

https://stackoverflow.com/questions/53427501

复制
相关文章

相似问题

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