我正在使用 Angular,并且我在以下結構中輸入資料,鍵 = 字串,值 = 字串陣列:
inputObject= {
'employees': [
'bob/january',
'bob/january-february',
'bob/january-march',
'steve/january',
'steve/january-february',
'steve/january-march',
'september',
],
};
我需要通過使用“/”作為分隔符拆分值來轉換此物件,因此拆分員工陣列中的字串元素并將其放入一個新物件中,其中“/”之前的字串值成為新物件的鍵并且'/'之后的字串值被添加為字串值陣列。如果員工元素中的值在字串中沒有“/”,則鍵應該是硬編碼的字串值,例如“n/a”,如下所示
期望輸出:
outputObject = {
'bob': [
'january',
'january-february',
'january-march'
],
'steve': [
'january',
'january-february',
'january-march',
],
'n/a': 'september'
}
我嘗試了各種技術,其中一個示例如我嘗試添加到地圖的代碼段所示。這可以通過添加到新物件或您可以推薦的任何其他資料結構來實作。
inputObject= {
'employees': [
'bob/january',
'bob/january-february',
'bob/january-march',
'steve/january',
'steve/january-february',
'steve/january-march',
'september',
],
};
let outputMap = new Map();
let splitValues = inputObject.employees.map(a => a.split('/'));
console.log(splitValues)
splitValues.forEach(a => {
if(a.length > 1){
outputMap.set(a[0], a[1]);
} else {
outputMap.set('n/a', a[0])
}
});
console.log(outputMap)
Stackblitz:https ://stackblitz.com/edit/angular-ivy-ogbdwv
uj5u.com熱心網友回復:
您可以使用Array.prototype.reduce()對專案進行分組并String.prototype.match()實作拆分邏輯:
const input = {
employees: [
'bob/january',
'bob/january-february',
'bob/january-march',
'steve/january',
'steve/january-february',
'steve/january-march',
'september',
]
},
output = input.employees
.reduce((acc, str) => {
const [key = 'n/a', value] = str
.match(/(([^/] )\/)?(. )/)
.slice(2)
const group = acc[key]
group
? group.push(value)
: acc[key] = [value]
return acc
}, {})
console.log(output)
.as-console-wrapper{min-height:100%;}
uj5u.com熱心網友回復:
Reduce 非常適合將一種資料結構更改為另一種資料結構。
它可能看起來像這樣(未經測驗):
type Output = {
[name:string]: string[]
}
const output = inputObject.employees.reduce<Output>((acc, curr) => {
const splitStr = curr.split('/')
if (splitStr.length === 1) {
return {
...acc,
'n/a': [
...acc['n/a'],
splitStr[0]
]
}
}
const [name, date] = splitStr;
return {
...acc,
[name]: acc[name]?.length > 0
? [...acc[name], date]
: [date]
}
}, {});
console.log(output);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/345350.html
標籤:javascript 数组 有角的 打字稿 数据结构
