如何将数据从一个模式转换到另一个模式



我正在尝试将给定的数据转换为其他格式,但无法完成。

输入:

const arr= [{acc:"12345",address:{state:"tx",zip:"9999"}},
{acc:"54321",address:{state:"tx",zip:"9999"}},
{acc:"67891",address:{state:"ca",zip:"8888"}},
{acc:"19876",address:{state:"ca",zip:"8888"}}]

预期o/p:

[
{
address: '{state:"tx",zip:"9999"}',
accounts: ["12345","54321"]
},
{
address: '{state:"ca",zip:"8888"}',
accounts: ["67891","19876"]
},
]

这是我试过的

const arr= [{acc:"12345",address:{state:"tx",zip:"9999"}},
{acc:"54321",address:{state:"tx",zip:"9999"}},
{acc:"67891",address:{state:"ca",zip:"8888"}},
{acc:"19876",address:{state:"ca",zip:"8888"}}]
let res = {}
arr.forEach(item=>{
const formattedAddress = JSON.stringify(item.address) ;
if(!res[formattedAddress]){
res[formattedAddress] = []
}
})
for(let i in res){
arr.forEach(item=>{
const formattedAddress = JSON.stringify(item.address);
if(formattedAddress === i){
res[i].push(item.acc)
}
})
}
console.log(res)

分组到由<state>_<zip>索引的对象或Map中,然后获取对象的值。

const arr= [{acc:"12345",address:{state:"tx",zip:"9999"}},
{acc:"54321",address:{state:"tx",zip:"9999"}},
{acc:"67891",address:{state:"ca",zip:"8888"}},
{acc:"19876",address:{state:"ca",zip:"8888"}}]
const groupedByAddress = {};
for (const { acc, address } of arr) {
const key = address.state + '_' + address.zip;
groupedByAddress[key] ??= { address, accounts: [] };
groupedByAddress[key].accounts.push(acc);
}
console.log(Object.values(groupedByAddress));

您可以使用一个以字符串地址为键、以数组为帐户的映射:

const arr = [{ acc: "12345", address: { state: "tx", zip: "9999" } },
{ acc: "54321", address: { state: "tx", zip: "9999" } },
{ acc: "67891", address: { state: "ca", zip: "8888" } },
{ acc: "19876", address: { state: "ca", zip: "8888" } }]
let results = new Map<String, String[]>()
arr.forEach(item => {
const addressString = JSON.stringify(item.address)
const entries = results.get(addressString) || []
entries.push(item.acc)
results.set(addressString, entries)
})
results.forEach((val, key) => {
console.log({
address: key,
accounts: val
})
})

最新更新