将对象转换为对象数组
convert object to array of object
我有这样来自后端的数据:
const fetchResult = {
cmo: 'integrated',
schedule1: '2021-08-12',
schedule2: '2021-09-20',
kendaraan: {},
kubikasi1: 207000,
kubikasi2: 20000,
status_so1: true,
status_so2: false,
}
我的预期:
const result = [
{
schedule: value,
kubikasi: value,
status_so: true
},
{
schedule: value,
kubikasi: value,
status_so: false
},
]
基本上我想将 json 从后端格式化为对象数组,并且我想根据预期结果对其进行分组。例如 api 中的 schedule
等数据可以是动态的,例如 schedule6
.
我已经尝试过的
for (let i = 1; i <= 4; i++) {
if (cmo["schedule_" + i]) {
data.push({
schedule: cmo["schedule_" + i],
namakendaraan: cmo["namakendaraan" + i],
kendaraan: cmo["kendaraan" + i],
totalCarton: cmo["totalCarton" + i],
tonase: cmo["tonase_" + i],
totalTonaseKendaraan: cmo["totalTonaseKendaraan" + i],
totalPercentaseTonaseOrder: cmo["totalPercentaseTonaseOrder" + i],
kubikasi: cmo["kubikasi_" + i],
totalKubikasiKendaraan: cmo["totalKubikasiKendaraan" + i],
totalPercentaseKubikasiOrder:
cmo["totalPercentaseKubikasiOrder" + i],
nomor_so: cmo["nomor_so_" + i],
status_so: cmo["status_so_" + i],
});
} else {
data.push({
schedule: null,
namakendaraan: null,
kendaraan: null,
totalCarton: null,
tonase: null,
totalTonaseKendaraan: null,
totalPercentaseTonaseOrder: null,
kubikasi: null,
totalKubikasiKendaraan: null,
totalPercentaseKubikasiOrder: null,
nomor_so: null,
status_so: null,
});
}
您可以将对象的条目缩减为 Map。对于每个条目,获取密钥和数字 (idx
) 。如果没有数字,则通过返回累加器(地图)来跳过。如果 idx
存在,add/update Map 中的对象:
const fetchResult = {"cmo":"integrated","schedule1":"2021-08-12","schedule2":"2021-09-20","kendaraan":{},"kubikasi1":207000,"kubikasi2":20000,"status_so1":true,"status_so2":false}
const result = Array.from(Object.entries(fetchResult)
.reduce((acc, [k, v]) => {
const [key, idx = null] = k.split(/([0-9]+$)/)
return idx === null
? acc
: acc.set(idx, { ...acc.get(idx), [key]: v })
}, new Map()).values())
console.log(result)
根据编号对对象的所有条目进行分组,减少为数组的数组。然后映射到对象数组。
const fetchResult = { cmo: 'integrated', schedule1: '2021-08-12', schedule2: '2021-09-20', kendaraan: {}, kubikasi1: 207000, kubikasi2: 20000,status_so1: true,status_so2: false,}
const result = Object.entries(fetchResult).reduce((a,c)=>{
if(parseInt(c[0][c[0].length-1])>0){
const ind = parseInt(c[0][c[0].length-1])-1
const push = [c[0].substring(0,c[0].length-1),c[1]]
!a[ind]?(a[ind]=[],a[ind].push(push)):a[ind].push(push)
}
return a
},[]).map(el=>Object(Object.fromEntries(el)))
console.log(result)
我有这样来自后端的数据:
const fetchResult = {
cmo: 'integrated',
schedule1: '2021-08-12',
schedule2: '2021-09-20',
kendaraan: {},
kubikasi1: 207000,
kubikasi2: 20000,
status_so1: true,
status_so2: false,
}
我的预期:
const result = [
{
schedule: value,
kubikasi: value,
status_so: true
},
{
schedule: value,
kubikasi: value,
status_so: false
},
]
基本上我想将 json 从后端格式化为对象数组,并且我想根据预期结果对其进行分组。例如 api 中的 schedule
等数据可以是动态的,例如 schedule6
.
我已经尝试过的
for (let i = 1; i <= 4; i++) {
if (cmo["schedule_" + i]) {
data.push({
schedule: cmo["schedule_" + i],
namakendaraan: cmo["namakendaraan" + i],
kendaraan: cmo["kendaraan" + i],
totalCarton: cmo["totalCarton" + i],
tonase: cmo["tonase_" + i],
totalTonaseKendaraan: cmo["totalTonaseKendaraan" + i],
totalPercentaseTonaseOrder: cmo["totalPercentaseTonaseOrder" + i],
kubikasi: cmo["kubikasi_" + i],
totalKubikasiKendaraan: cmo["totalKubikasiKendaraan" + i],
totalPercentaseKubikasiOrder:
cmo["totalPercentaseKubikasiOrder" + i],
nomor_so: cmo["nomor_so_" + i],
status_so: cmo["status_so_" + i],
});
} else {
data.push({
schedule: null,
namakendaraan: null,
kendaraan: null,
totalCarton: null,
tonase: null,
totalTonaseKendaraan: null,
totalPercentaseTonaseOrder: null,
kubikasi: null,
totalKubikasiKendaraan: null,
totalPercentaseKubikasiOrder: null,
nomor_so: null,
status_so: null,
});
}
您可以将对象的条目缩减为 Map。对于每个条目,获取密钥和数字 (idx
) 。如果没有数字,则通过返回累加器(地图)来跳过。如果 idx
存在,add/update Map 中的对象:
const fetchResult = {"cmo":"integrated","schedule1":"2021-08-12","schedule2":"2021-09-20","kendaraan":{},"kubikasi1":207000,"kubikasi2":20000,"status_so1":true,"status_so2":false}
const result = Array.from(Object.entries(fetchResult)
.reduce((acc, [k, v]) => {
const [key, idx = null] = k.split(/([0-9]+$)/)
return idx === null
? acc
: acc.set(idx, { ...acc.get(idx), [key]: v })
}, new Map()).values())
console.log(result)
根据编号对对象的所有条目进行分组,减少为数组的数组。然后映射到对象数组。
const fetchResult = { cmo: 'integrated', schedule1: '2021-08-12', schedule2: '2021-09-20', kendaraan: {}, kubikasi1: 207000, kubikasi2: 20000,status_so1: true,status_so2: false,}
const result = Object.entries(fetchResult).reduce((a,c)=>{
if(parseInt(c[0][c[0].length-1])>0){
const ind = parseInt(c[0][c[0].length-1])-1
const push = [c[0].substring(0,c[0].length-1),c[1]]
!a[ind]?(a[ind]=[],a[ind].push(push)):a[ind].push(push)
}
return a
},[]).map(el=>Object(Object.fromEntries(el)))
console.log(result)