从数组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
[
{
"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;i console.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),
});
});