JS уменьшить потери первого элемента массива - PullRequest
2 голосов
/ 09 мая 2020

У меня есть функция 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`);
}

Ответы [ 2 ]

4 голосов
/ 09 мая 2020

Если можно, я бы порекомендовал небольшое улучшение стиля.

Ваша функция 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`, '');

Это небольшое изменение, но оно делает код немного легче понять.

3 голосов
/ 09 мая 2020

Попробуйте добавить начальное значение cc

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

Выход

key1=value1\nkey2=value2\n
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...