我想将对象数组转换为对象
var arrays = [
{key:'k1',value:'v1'},
{key:'k2',value:'v2'},
{key:'k3',value:'v3'}
];
Run Code Online (Sandbox Code Playgroud)
到
{k1: "v1", k2: "v2", k3: "v3"}
Run Code Online (Sandbox Code Playgroud)
这有效
const object: {[k: string]: any} = {};
arrays.forEach((item) => { object[item.key] = item.value });
Run Code Online (Sandbox Code Playgroud)
但我想知道如何使用reduce 来做到这一点。
const customData = arrays.reduce((obj, item) => (obj: Record<string, any>) => (obj[item.key] = item.value, obj), {});
Run Code Online (Sandbox Code Playgroud)
回报
(obj) => (obj[item.key] = item.value)
Run Code Online (Sandbox Code Playgroud)
谢谢。
内部的回调reduce不应返回函数,而是返回处理当前项目后的中间值 \xe2\x80\x93 在您的情况下,将当前项目分配给它后的对象。
const customData = array.reduce((obj, item) => {\n obj[item.key] = item.value;\n return obj;\n}, {} as Record<string, string>)\nRun Code Online (Sandbox Code Playgroud)\n\n
您的代码的问题是 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);
Run Code Online (Sandbox Code Playgroud)
注意:添加结果类型是为了让打字稿找出结果类型。
而且,您可以使用简写语法来编写,
const result = arrays.reduce((prev: {[key: string]: string}, curr) =>
({ ...prev, [curr.key]: curr.value}), {})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9292 次 |
| 最近记录: |