ESLint не допускает

У меня есть объект

currentValues= {hey:1212, git:1212, nmo:12121}

и я использую для этого:

for (const key in currentValues) {
    if (Object.prototype.hasOwnProperty.call(currentValues, key)) {
        yield put(setCurrentValue(key, currentValues[key]));
    }
}

ESLint показывает мне ошибку, которая говорит:

ESLint: for..in петли итерации по всей цепочке прототипов, которая практически никогда не нужна вам. Используйте Object. {Keys, values, entries} и итерации по результирующему массиву. (Не-ограниченного синтаксиса

Как мне изменить код?

Ответ 1

В нем говорится:

Использовать объект. {ключи, значения, записи} и перебрать полученный результат массив.

Итак, вы можете сделать что-то подобное, чтобы получить ключи объекта в виде массива, а затем прокрутите ключи, чтобы внести необходимые изменения.

currentValues= {hey:1212, git:1212, nmo:12121}

Object.keys(currentValues).forEach(function(key) {
  yield put(setCurrentValue(key, currentValues[key]));
})

Ответ 2

Я использовал следующее:

const keys = Object.keys(currentValues);
const values = Object.values(currentValues);
for (let i = 0; i < keys.length; i += 1) {
    yield put(setCurrentValue(keys[i], values[i]));
}

Это правильно и без ошибок ESLint.

Ответ 3

Вы можете получить массив всех ваших значений внутри вашего объекта, просто делая

var myValuesInArray = Object.values(currentValues);

Ответ 4

Я знаю, что это похоже на выше, но вот полный пример:

const data = res.data;
const keys = Object.keys(data);
const values = Object.values(data);

for (let i = 0; i <= keys.length; i += 1) {
  if (Object.prototype.hasOwnProperty.call(values, i)) {
     this.rows.push({
        name: values[i].name,
        email: values[i].email,
        address: values[i].address,
        phone: values[i].phone,
        role: values[i].role,
  });
 }
}

Ответ 5

попробуйте это вместо:

Object.keys(currentValues).map(key => (yield put(setCurrentValue(key, currentValues[key]))));

Ответ 6

Использование for...in будет перебирать все свойства, включая те из прототипа объекта. Я не уверен, почему вы делаете Object.prototype.hasOwnProperty.call(currentValues, key) а не просто: currentValues.hasOwnProperty(key). Я думаю, что это должно заставить ESLint знать, что вы фильтруете только для собственных свойств.

Однако я предлагаю использовать for (const key of Object.keys()), который является более семантическим.