提问人:RamAlx 提问时间:5/5/2017 最后编辑:JJJRamAlx 更新时间:8/25/2022 访问量:77732
ESLint 不允许
ESLint doesn't allow for in
问:
我有一个对象
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:为了..循环遍历整个原型链,这几乎从来都不是你想要的。使用 Object。{keys,values,entries},并遍历生成的数组。(无限制语法
我应该如何编辑我的代码?
答:
using 将遍历所有属性,包括对象原型中的属性。我不确定你为什么要这样做,而不仅仅是:.
我认为这应该让 ESLint 意识到您只过滤自己的属性。for...in
Object.prototype.hasOwnProperty.call(currentValues, key)
currentValues.hasOwnProperty(key)
但是,我建议使用 ,这更具语义性。for (const key of Object.keys())
评论
hasOwnPrototype(..)
Object
您可以获取对象中所有值的数组
var myValuesInArray = Object.values(currentValues);
它说,
使用 Object。{keys,values,entries},并遍历生成的 数组。
因此,您可以执行类似操作以数组形式获取对象键,然后遍历键以进行必要的更改。
currentValues= {hey:1212, git:1212, nmo:12121}
Object.keys(currentValues).forEach(function(key) {
yield put(setCurrentValue(key, currentValues[key]));
})
评论
for in
for..in
if (Object.prototype.hasOwnProperty.call...)
for..in
Object.keys
if
for..in
for..in
我使用了以下内容:
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 错误。
我知道它与上述类似,但这里有一个完整的例子:
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,
});
}
}
评论
试试这个:
Object.keys(currentValues).map(key => (yield put(setCurrentValue(key, currentValues[key]))));
我会通过以下方式进行重构来做到这一点。
const currentValues = { hey: 1212, git: 1212, nmo: 12121 };
Object.keys(currentValues).forEach((e) => console.log(`${e} : ${currentValues[e]}`));
结果:
嘿 : 1212 GIT :1212 编号 : 12121
Object.values(currentValues).forEach((e) => console.log(`Values: ${e}`));
结果:
(2)值: 1212 值: 12121
Object.entries(currentValues).forEach((e) => console.log(`${e[0]} : ${e[1]}`));
结果:
嘿 : 1212 GIT :1212 编号 : 12121
let animal = {
eats: "Eating",
};
let rabbit = {
jumps: "Jumping",
};
rabbit.__proto__ = animal;
for (const rabbitProps in rabbit) {
// This will print both eats and jumps properties because they're part of
// prototype chain
console.log("rabbitProps: ", rabbitProps);
}
// This prints only jumps as Object.keys shows only the keys of object
console.log(Object.keys(rabbit));
查看上面的代码,您可以看到,当使用 for...in loop[ 它将显示作为对象一部分的所有属性以及对象的原型链中设置的属性,因此 eslint 建议使用 Object.keys 或值或条目,因为它们不查看原型链,而只是查看您的对象。
评论
for(const key of currentValues.keys())
entries
Object.keys()
for ... in
for...of
.keys()
for in