Присвоение свойству параметра функции (no-param-reassign) - PullRequest
0 голосов
/ 18 июня 2020

У меня есть эта функция, и хотя она работает нормально, я получаю сообщение об ошибке ESLint:

57:5  error  Assignment to property of function parameter 'result'  no-param-reassign   
66:5  error  Assignment to property of function parameter 'result'  no-param-reassign

Я не уверен, как правильно разрешить

export const fn = article => article.categoryValueDtoSet.reduce((result, item) => {
  if (item.language) {
    const language = item.language.languageValue;
    const category = item.categoryValue;
    result[language] = category;
  }
  return result;
}, { it: undefined, de: undefined, en: undefined );

Я сделал некоторые исследования, и кажется, что мне нужно использовать Object.assign, и я попробовал, но, вероятно, сделал это неправильно. Как мне написать свою функцию, чтобы я мог решить свою проблему?

1 Ответ

1 голос
/ 18 июня 2020

Это распространенная проблема ESLint, которая часто возникает в старой кодовой базе. Вы изменили переменную result, переданную в качестве параметра. Это поведение запрещено правилом.

Чтобы решить эту проблему, скопируйте аргумент во временную переменную и вместо этого работайте с ним:

export const fn = article => article.categoryValueDtoSet.reduce((res, item) => {
    const result = {...res}; // if result is object
    // const result = [...res]; // if result is array
    // Rest of your code can work without change
}

Примечание. Оператор распространения объекта - это сахарный синтаксис для Object.assign(). И он, и копия массива здесь не глубоки для простоты и могут вызвать побочные эффекты, потому что вы все еще получаете доступ к исходным отдельным элементам исходного объекта или массива. Лучше использовать вместо этого глубокую копию.

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