Обновите свойство из строки для объекта в JavaScript без мутации - PullRequest
0 голосов
/ 01 марта 2019

При переборе объекта и его обновлении я чувствую, что делаю это неправильно.Это метод, который я построил, чтобы сделать это, и у меня есть сомнения по поводу record[header] = {label: record[header]};

У кого-нибудь есть лучшее решение, чтобы избежать мутации records array?

setAfterRecords(preview: any): void {
    const { columns: headers } = preview;
    const { rows: records } = preview;

    records.map((record, i) => {
        headers.forEach(header => {
            record[header] = {
                label: record[header],
            };
        });

        return record;
    });

    this.after = { headers, records };
}

Спасибо.

1 Ответ

0 голосов
/ 01 марта 2019

Следующие должны сделать это.Он использует оператор распространения объекта new-ish (... на {}).Это похоже на Object.assign(), но в более кратком синтаксисе.

setAfterRecords(preview: any): void {
  const { columns: headers, rows: records } = preview;

  // Build a new array of records.
  const newRecords = records.map(record => {

    // Build a new record object, adding in each header.
    return headers.reduce((c, header) => {

      // This operation shallow-copies record from the initial value or
      // previous operation, adding in the header.
      return { ...c, [header]: { label: record[header] } }
    }, record)
  })

  this.after = { headers, records: newRecords };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...