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

问题描述 投票:0回答:1

我有一个 reduce 用于将对象的键和值以格式化的方式还原和格式化为字符串的函数。key1=value1\nkey2=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`);
}
javascript typescript
1个回答
3
投票

尝试添加acc的初始值

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

产量

key1=value1\nkey2=value2\n

4
投票

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

你的 reduce 函数(添加了''初始化器)。

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

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

你可以通过将你对 Object.keys() (返回 key)与 Object.entries() (返回 key, value).

所有范围内 "的版本是这样的。

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

这是个小改动,但它让代码更容易理解。 It's a small change, but it makes the code a bit easier to understand.

© www.soinside.com 2019 - 2024. All rights reserved.