JS reduce丢失数组的第一个元素



我有一个reduce函数,用于将对象键和值减少并格式化为key1=value1nkey2=value2格式的字符串,但它正在丢失第一个元素:

样本数据

{
"key1": "value1",
"key2": "value2"
}
private toMt5Set(data: any): string {
const object = JSON.parse(data);
return Object.keys(object || {})
.reduce((acc, key) => acc + `${key}=${object[key]}n`);
}

如果可以的话,我想推荐一个小的风格改进。

您的reduce函数(添加了"初始值设定项(:

.reduce((acc, key) => acc + `${key}=${object[key]}n`, '');

正在访问在reduce的范围之外定义的object。这些"函数外"引用比"函数内"引用更难推理。

您可以通过将对Object.keys()(返回key(的调用替换为Object.entries()(返回key, value(来避免这种"函数外"问题。

"所有在范围内"的版本看起来是这样的:

Object.entries(object || {})
.reduce((acc, [key, val]) => acc + `${key}=${val}n`, '');

这是一个小的更改,但它使代码更容易理解。

尝试添加acc 的初始值

Object.keys(object || {}) .reduce((acc, key) => `${acc}${key}=${object[key]}n`, '');

输出

key1=value1nkey2=value2n

最新更新