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())
, который является более семантическим.