我有以下形式的物件陣列,它具有三個屬性 serviceName、pool 和 environment 我想根據環境對物件進行分組,同時需要連接池:
const data = [
{
serviceName: "visa",
pool: "3g",
environment: "test-int",
},
{
serviceName: "visa",
pool: "4g",
environment: "test-int",
},
{
serviceName: "visa",
pool: "5g",
environment: "test-int",
},
{
serviceName: "amex",
pool: "5g",
environment: "dev",
},
{
serviceName: "amex",
pool: "6g",
environment: "dev",
},
];
我想要以下格式的輸出:
const output = [
{
serviceName: "visa",
pool: "3g,4g,5g",
environment: "test-int"
},
{
serviceName: "amex",
pool: "5g,6g",
environment: "dev"
},
]
根據我當前的代碼,它只回傳一個物件而不是物件陣列:
const output = data.reduce((acc, ar) => {
let res = {
...acc,
pool: acc["pool"] "," ar.pool
};
return res;
}
});
uj5u.com熱心網友回復:
我認為基本問題是你需要分割出所有匹配的元素,serviceName然后做你的減少來加入pool價值。
也許是這樣的:
const res = [
{
serviceName: "visa",
pool: "3g",
environment: "test-int"
},
{
serviceName: "visa",
pool: "4g",
environment: "test-int"
},
{
serviceName: "amex",
pool: "5g",
environment: "dev"
},
{
serviceName: "amex",
pool: "6g",
environment: "dev"
}
];
const groupBy = (arr, getKey) => {
return arr.reduce((memo, item) => {
const key = getKey(item)
memo[key] ||= [];
memo[key].push(item);
return memo;
}, {})
}
const byServiceName = groupBy(res, ({serviceName}) => serviceName);
const results = Object.values(byServiceName).map((items) => {
return items.reduce((acc, item) => {
let res = {
...acc,
pool: acc["pool"] "," item.pool
};
return res;
})
});
console.log(results)
該groupBy功能可以簡化為不帶該getKey功能,但這增加了一點靈活性。如果你知道它總是在 serviceName 上,你可以改為使用類似的東西
const groupByServiceName = (arr) => {
const key = 'serviceName'
return arr.reduce((memo, item) => {
memo[key] ||= [];
memo[key].push(item);
return memo;
}, {})
uj5u.com熱心網友回復:
這是一種方法,它生成一個以environment值為鍵的物件,然后將其值提取到陣列中
const data = [
{
serviceName: "visa",
pool: "3g",
environment: "test-int",
},
{
serviceName: "visa",
pool: "4g",
environment: "test-int",
},
{
serviceName: "visa",
pool: "5g",
environment: "test-int",
},
{
serviceName: "amex",
pool: "5g",
environment: "dev",
},
{
serviceName: "amex",
pool: "6g",
environment: "dev",
},
];
const output = Object.values(data.reduce((acc, ar) =>
{
const ret = acc[ar.environment] || {...ar};
if (ret === acc[ar.environment])
ret.pool = "," ar.pool;
else
acc[ar.environment] = ret;
return acc;
},{}));
console.log(output);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/463564.html
標籤:javascript
上一篇:當談到Kotlin中的封裝時,大多數變數是否可以像Java那樣是公共的,因為它具有getter和setter屬性?
下一篇:根據名稱匹配用另一個資料框替換列
