实际上我有一系列要转换的对象。
[
{ "val1":"2.0" },
{ "val2":"2.0" },
{ "val3":"2.0" },
{ "val1":"4.0" },
{ "val2":"2.0" },
{ "val3":"4.7" },
{ "val1":"4.0" },
{ "val2":"4.0" },
{ "val3":"4.0" }
]
我应该把每三个项目放在一个带有父项目的单独数组中。
我会将其转换为这种格式
[
[
"20190201",
[
{ "val1":"2.0" },
{ "val2":"2.0" },
{ "val3":"2.0" }
]
],
[
"20190202",
[
{ "val2":"2.0" },
{ "val3":"2.0" },
{ "val1":"4.0" }
]
]
]
实际上这就是我的方式
const returnData= fileDateName.map((_fileDate: string, _index: number) => {
return [_fileDate, [
filteredData[_index],
filteredData[_index + 1],
filteredData[_index + 2],
]];
});
我的实际问题是我的输出不采用下三个值,但是每次移动一个项目然后采用下一个值。我认为这是因为_index
的值没有按预期增加。
Index =0
filteredData[0],
filteredData[1],
filteredData[2],
index=1
filteredData[1],
filteredData[2],
filteredData[3],
...
但是迭代应该完成
Index =0
filteredData[0],
filteredData[1],
filteredData[2],
index=3
filteredData[3],
filteredData[4],
filteredData[5],
...
修改
FileDateName= ["20190201","20190202","20190203"]
如何在每次迭代中设置索引值?
答案 0 :(得分:2)
您可以使用Array#map和Array#slice做类似的事情。取日期的索引,然后乘以3,以找到应该取数据的起始位置。
const dates = [20190201, 20190202, 20190203]
const data=[{"val1":"2.0"},{"val2":"2.0"},{"val3":"2.0"},{"val1":"4.0"},{"val2":"2.0"},{"val3":"4.7"},{"val1":"4.0"},{"val2":"4.0"},{"val3":"4.0"}]
const res = dates.map((date, index)=>{
const start = index * 3;
const end = start + 3;
return [
date,
data.slice(start, end)
]
});
console.log(res);
答案 1 :(得分:1)
尝试这个:
df <- data.frame('variable'=rep(c('control','treatment'),each=20),
'value'=c(runif(20, min=0, max=3), rnorm(60)))
ggtest<-ggplot(df,aes(variable, value)) +
geom_beeswarm(priority='random',cex=2.5)
ggtest
答案 2 :(得分:0)
这是一个相当容易的任务。
只需将数组简化为三个项目大小的块数组即可。在此过程中,使用模块化算法确定何时需要启动新组。
var data = [
{ "val1": "2.0" },
{ "val2": "2.0" },
{ "val3": "2.0" },
{ "val1": "4.0" },
{ "val2": "2.0" },
{ "val3": "4.7" },
{ "val1": "4.0" },
{ "val2": "4.0" },
{ "val3": "4.0" }
];
console.log(groupData(data, 3, new Date(2019, 1, 1)));
function formatDate(d) {
return [
d.getFullYear(),
('00' + (d.getMonth() + 1)).substr(-2),
('00' + d.getDate()).substr(-2),
].join('');
}
function groupData(data, size, startDate) {
return data.reduce((result, item, index) => {
if (index % size === 0) {
result.push([ formatDate(startDate), [ item ] ]); // Begin a new group
startDate.setDate(startDate.getDate() + 1); // Increment the day by 1
} else {
result[result.length - 1][1].push(item); // Add item to the last group
}
return result;
}, []);
}
.as-console-wrapper { top: 0; max-height: 100% !important; }
答案 3 :(得分:0)
您可以使用reduce
进行此操作,方法是遍历dates数组并将带有日期的3个项目推到ouptut数组:
const data = [
{ "val1":"2.0" },
{ "val2":"2.0" },
{ "val3":"2.0" },
{ "val1":"4.0" },
{ "val2":"2.0" },
{ "val3":"4.7" },
{ "val1":"4.0" },
{ "val2":"4.0" },
{ "val3":"4.0" }
];
const dates = ['20190101', '20190201', '20190301'];
const result = dates.reduce((acc, date, i) => {
acc.push([date, [data[i * 3], data[i * 3 + 1], data[i * 3 + 2]]]);
return acc;
}, []);
console.log(result);