如何解决TS - 将一组对象减少为一个对象
我想将一组对象转换为一个对象
var arrays = [
{key:'k1',value:'v1'},{key:'k2',value:'v2'},{key:'k3',value:'v3'}
];
到
{k1: "v1",k2: "v2",k3: "v3"}
这有效
const object: {[k: string]: any} = {};
arrays.forEach((item) => { object[item.key] = item.value });
但我想知道如何使用 reduce 来做到这一点。
const customData = arrays.reduce((obj,item) => (obj: Record<string,any>) => (obj[item.key] = item.value,obj),{});
返回
(obj) => (obj[item.key] = item.value)
谢谢。
解决方法
reduce
内的回调不应该返回函数,而是返回处理当前项目后的中间值 - 在您的情况下,是将当前项目分配给它后的对象。
const customData = array.reduce((obj,item) => {
obj[item.key] = item.value;
return obj;
},{} as Record<string,string>)
,
您的代码的问题是 TypeScript 编译器无法推断返回类型,而不是对象类型。因此,对于打字稿可以自行推断的单个对象,您不需要 Record<string,any>
。您需要传入您期望的结果类型。
你可以简单地这样做,
var arrays = [
{ key:'k1',value:'v1' },{ key:'k2',value:'v2' },{ key:'k3',value:'v3' }
];
const result = arrays.reduce((prev: {[key: string]: string},curr) => {
prev[curr.key] = curr.value;
return prev;
},{});
console.log(result);
注意:添加结果类型是为了让打字稿找出结果类型。
而且,你可以用速记语法来写,
const result = arrays.reduce((prev: {[key: string]: string},curr) =>
({ ...prev,[curr.key]: curr.value}),{})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。