TS - 将对象数组缩减为一个对象
TS - Reduce an array of objects to an object
我想将对象数组转换为对象
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), {});
returns
(obj) => (obj[item.key] = item.value)
谢谢。
reduce
中的回调不应该是 return 一个函数,而是当前项目处理后的中间值——在你的例子中是你将当前项目分配给之后的对象它。
const customData = array.reduce((obj, item) => {
obj[item.key] = item.value;
return obj;
}, {} as Record<string, string>)
您的代码的问题是 TypeScript 编译器无法推断 return 类型,而不是对象类型。因此,打字稿可以自行推断的单个对象不需要 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);
注意:添加结果类型是为了让打字稿确定结果类型。
而且,你可以用 shorthand 语法来写,
const result = arrays.reduce((prev: {[key: string]: string}, curr) =>
({ ...prev, [curr.key]: curr.value}), {})
我想将对象数组转换为对象
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), {});
returns
(obj) => (obj[item.key] = item.value)
谢谢。
reduce
中的回调不应该是 return 一个函数,而是当前项目处理后的中间值——在你的例子中是你将当前项目分配给之后的对象它。
const customData = array.reduce((obj, item) => {
obj[item.key] = item.value;
return obj;
}, {} as Record<string, string>)
您的代码的问题是 TypeScript 编译器无法推断 return 类型,而不是对象类型。因此,打字稿可以自行推断的单个对象不需要 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);
注意:添加结果类型是为了让打字稿确定结果类型。
而且,你可以用 shorthand 语法来写,
const result = arrays.reduce((prev: {[key: string]: string}, curr) =>
({ ...prev, [curr.key]: curr.value}), {})