如何解决如何从另一个数组返回数组数据?
我有数组数据,迭代之后,我想用另一个结构获取新数组
这是我的源数组:
let oldArr = [
{
"20200714": [
{
"StartDate": "2020-07-14T11:05:31.151687000","EndDate": "2020-07-14T12:11:59.673687000",},{
"StartDate": "2020-07-14T13:05:31.151687000","EndDate": "2020-07-14T14:11:59.673687000",],"20200715": [
{
"StartDate": "2020-07-15T14:05:31.151687000","EndDate": "2020-07-15T15:11:59.673687000",}
]
}
]
输出应如下所示:
[
{
x: '20200714',y: [
'2020-07-14T11:05:31.151687000','2020-07-14T12:11:59.673687000',]
},{
x: '20200714',y: [
'2020-07-14T13:05:31.151687000','2020-07-14T13:05:31.151687000',{
x: '20200715',y: [
'2020-07-15T14:05:31.151687000','2020-07-15T15:11:59.673687000',]
}
]
我正在尝试通过map()这样的数组进行迭代,但是我不知道该怎么做
let newArr = oldArr.map((key) => {
return {
x: key,y: [
key.StartDate,key.EndDate
]
}
)
预先感谢
解决方法
您需要组合多个reducer来访问正确的数据:
let oldArr = [
{
"20200714": [
{
"StartDate": "2020-07-14T11:05:31.151687000","EndDate": "2020-07-14T12:11:59.673687000",},{
"StartDate": "2020-07-14T13:05:31.151687000","EndDate": "2020-07-14T14:11:59.673687000",],"20200715": [
{
"StartDate": "2020-07-15T14:05:31.151687000","EndDate": "2020-07-15T15:11:59.673687000",}
]
}
]
const newArr = oldArr.reduce((mainAcc,currItem) => [...mainAcc,...Object.keys(currItem).reduce((acc,currKey) => {
const vals = currItem[currKey];
return [
...acc,vals.map((v) => ({ x: currKey,y: [v.StartDate,v.EndDate] })),];
},[])],[]);
console.log(newArr);
,
您的源实际上是一个对象的数组,因此您想使用Object.entries
获取一个数组,然后使用y
值的内部数组上的嵌套循环遍历那些条目。
由于存在三个嵌套循环,因此,如果您只创建一个数组并将其推入forEach
中,而不是嵌套多个reduce
,则代码会更简单:
let oldArr = [{
"20200714": [{
"StartDate": "2020-07-14T11:05:31.151687000",{
"StartDate": "2020-07-14T13:05:31.151687000","20200715": [{
"StartDate": "2020-07-15T14:05:31.151687000",}]
}]
let newArr = []
oldArr.forEach(outerObject => Object.entries(outerObject)
.forEach(([key,items]) =>
items.forEach((item) => newArr.push({
x: key,y: [item.StartDate,item.EndDate]
}))
)
)
console.log(newArr)
,
您可以执行普通的for
循环以遍历对象键。实际上很简单:
var obj = [{
"20200714": [{
"StartDate": "2020-07-14T11:05:31.151687000",{
"StartDate": "2020-07-14T13:05:31.151687000","20200715": [{
"StartDate": "2020-07-15T14:05:31.151687000",}]
}];
var newObj = [];
for (var i = 0; i < obj.length; i++) {
var currentKeys = Object.keys(obj[i]);
for (var j = 0; j < currentKeys.length; j++) {
for (var k = 0; k < obj[i][currentKeys[j]].length; k++) {
newObj.push({
x: currentKeys[j],y: [obj[i][currentKeys[j]][k].StartDate,obj[i][currentKeys[j]][k].EndDate]
});
}
}
}
newObj
值:
[
{
"x": "20200714","y": [
"2020-07-14T11:05:31.151687000","2020-07-14T12:11:59.673687000"
]
},{
"x": "20200714","y": [
"2020-07-14T13:05:31.151687000","2020-07-14T14:11:59.673687000"
]
},{
"x": "20200715","y": [
"2020-07-15T14:05:31.151687000","2020-07-15T15:11:59.673687000"
]
}
]
,
我认为问题是因为您有一个带有单个对象的数组。因此,当您使用数组映射时,“键”是数组的位置0,我认为您可以执行类似的操作以获得预期的结果:
specialWords
我真的不知道您的节点版本,或者这是否适用于Web,但是我希望这对您有用。祝你有美好的一天
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。