javascript - Typescript bir Record türü üzerinde yineleme yap ve güncellenmiş Record'u döndür
Typescript'e yeniyim ve bir Record tipi üzerinde dolaşmam, değerlerde bazı güncellemeler yapmam ve Record'u geri döndürmem gerekiyor.
Türlerin tanımlanma şekli budur:
type Parent = Readonly<Record<string, Children>>;
type Children = ReadonlyArray<string>;
İşte üzerinde yineleme yapmak istediğim bazı örnek veriler:
const data = {
parent1: ["child1", "child2"],
parent2: ["child1","child2"]
};
Kayıttaki değerleri güncelleme yöntemi:
const updateChildren = (child: Children) : Children => {
return child.map( value => value + 'updated');
}
Bunun için sözdizimini yazmakta zorlanıyorum, örnekler aramaya çalıştım ama yardımcı olacak hiçbir şey bulamadım.
Object.entries kullanarak kaydı yineleyebilirim
Object.entries(data).forEach(([key, value]) => console.log(key, value));
Ayrıca Object.keys kullanmayı da denedim
Object.keys(data)
.map(key => updateChildren(data[key]))
Sanırım yakınım ama haritayı nasıl döndüreceğimi bilmiyorum çünkü burada Dizi [Dizi] döndürüyor
Güncellemeyi yapmak için bazı güzel bir yol var mı ve bu, kullanılan aynı türde güncellenmiş veriyi döndürür mü?
Okuduğunuz için teşekkürler.
Aşağıda yapmaya çalıştığım şeyin JavaScript kod parçacığı ve aşağıdaki örnekte updatedMap'i almayı gösteriyor.
const data = {
parent1: ["child1", "child2"],
parent2: ["child1","child2"]
};
function updateChildren(children) {
return children.map(child => child+'updated');
}
const updatedMap = new Map();
for (const [key, value] of Object.entries(data)) {
updatedMap.set(key, updateChildren(value));
}
updatedMap.forEach((value, key) => console.log(key + ":" + value));
console.log(Object.keys(data).map(key => updateChildren(data[key])));Cevap #1
Böyle bir şey...
type Children = ReadonlyArray<string>;
const data: Parent = {
parent1: ["child1", "child2"],
parent2: ["child1", "child2"],
};
type MutableObject<T> = { -readonly [P in keyof T]: T[P] };
const updateChildren = (child: Children): Children => {
return child.map(value => value + 'updated');
}
let newObj: Parent = Object.entries(data).reduce<MutableObject<Parent>>((acc, cur) => {
acc[cur[0]] = updateChildren(cur[1]);
return acc;
}, {})
console.log(newObj)
