如何将JSON数组负载转换为一个包含特定字段的对象和一个包含日期的数组



我从后端获取了一个JSON负载。数据包含一个带有对象的payload数组。通过某些方式,我想将数组中的这些对象转换为一个对象,并且selectedDate日期为自己的数组。JSON负载如下所示:

{
"success": true,
"payload": [
{
"weekNumber": 40,
"sortOrder": 1,
"label": "autumn",
"numberOfPossibleDays": 3,
"editable": true,
"selectedDate": "2020-09-29",
"deliveryDays": [
{
"date": "2020-09-28",
"contactPerson": null,
"phoneNumber": null,
"contactPerson2": null,
"phoneNumber2": null,
"selected": false
},
{
"date": "2020-09-29",
"contactPerson": "John",
"phoneNumber": "99887744",
"contactPerson2": "Tom",
"phoneNumber2": "40040000,
"selected": true
},
{
"date": "2020-09-30",
"contactPerson": null,
"phoneNumber": null,
"contactPerson2": null,
"phoneNumber2": null,
"selected": false
}
]
},
{
"weekNumber": 53,
"sortOrder": 2,
"label": "christmas",
"numberOfPossibleDays": 2,
"editable": true,
"selectedDate": "2020-12-29",
"deliveryDays": [
{
"date": "2020-12-28",
"contactPerson": null,
"phoneNumber": null,
"contactPerson2": null,
"phoneNumber2": null,
"selected": false
},
{
"date": "2020-12-29",
"contactPerson": "Doe,
"phoneNumber": "99999999",
"contactPerson2": "Foo",
"phoneNumber2": "44552200",
"selected": true
}
]
}
]
}

我想做的是得到这样的输出对象:

{
autumn=firstContactPersonName: "John",
autumn=firstContactPersonPhone: "46442644",
autumn=secondContactPersonName: "Tom",
autumn=secondContactPersonPhone: "40040000"
christmas=firstContactPersonName: "Doe",
christmas=firstContactPersonPhone: "99999999",
christmas=secondContactPersonName: "Foo",
christmas=secondContactPersonPhone: "44552200"
}

日期输出应该是这样的数组:

const dateArray = ["autumn=2020-09-29", "christmas=2020-12-29"]

我希望它是动态的,因为有时我可能有一个easter之类的对象。我之所以要这样做,是因为我使用该对象来填充输入字段中的内容,并使用dateArray来启用选择的日期。我知道这不是最好的解决方案,但我必须努力做到这一点。我是JavaScript的新手,在理解它时遇到了一些问题。如果有人能帮我,我将不胜感激,好吗?我希望这个问题和例子是好的。谢谢你的帮助。

let obj = {
"success": true,
"payload": [
{
"weekNumber": 40,
"sortOrder": 1,
"label": "autumn",
"numberOfPossibleDays": 3,
"editable": true,
"selectedDate": "2020-09-29",
"deliveryDays": [
{
"date": "2020-09-28",
"contactPerson": null,
"phoneNumber": null,
"contactPerson2": null,
"phoneNumber2": null,
"selected": false
},
{
"date": "2020-09-29",
"contactPerson": "John",
"phoneNumber": "99887744",
"contactPerson2": "Tom",
"phoneNumber2": "40040000",
"selected": true
},
{
"date": "2020-09-30",
"contactPerson": null,
"phoneNumber": null,
"contactPerson2": null,
"phoneNumber2": null,
"selected": false
}
]
},
{
"weekNumber": 53,
"sortOrder": 2,
"label": "christmas",
"numberOfPossibleDays": 2,
"editable": true,
"selectedDate": "2020-12-29",
"deliveryDays": [
{
"date": "2020-12-28",
"contactPerson": null,
"phoneNumber": null,
"contactPerson2": null,
"phoneNumber2": null,
"selected": false
},
{
"date": "2020-12-29",
"contactPerson": "Doe",
"phoneNumber": "99999999",
"contactPerson2": "Foo",
"phoneNumber2": "44552200",
"selected": true
}
]
}
]
}
let results={};
let datesArray=[];
obj.payload.map((x)=>{
datesArray.push(x.label+"="+x.selectedDate);
x["deliveryDays"].map((y)=>{
if(y.contactPerson){
let personKey = x.label + "=firstContactPersonName";
results[personKey] = y.contactPerson;
let contactKey = x.label+"=firstContactPersonPhone";
results[contactKey] = y.phoneNumber;
}
if(y.contactPerson2){
let secondPersonKey = x.label + "=secondContactPersonName";
results[secondPersonKey] = y.contactPerson2;
let secondContactKey = x.label+"=secondContactPersonPhone";
results[secondContactKey] = y.phoneNumber2;
}
});
});
console.log(datesArray)
console.log(results)

我们遍历有效载荷,并使用日期数组来存储日期和结果数组,以获得季节中的第一个和第二个联系人姓名。希望这能有所帮助!

最新更新