以下逻辑按预期工作。我没有办法改变 lint 规则。
数据在这种情况下只是一个被传入的对象,如下所示。
const testData = {
item_one: 'item',
};
这是接收上述数据的函数
const convert = (data) => {
for (const key in data) {
// ...
}
return data;
};
对于我的 for 循环,出现如下 lint 错误:
- for..in 循环迭代整个原型(prototype)链,这实际上不是您想要的。使用 Object.{keys,values,entries},并迭代结果数组
- for-in 的主体应包含在 if 语句中,以过滤原型(prototype)中不需要的属性
为了解决第一点,尝试将循环切换为 foreach 类型,如下所示,这解决了 lint。
但是由于某种原因,这打破了我的逻辑...由于 lint 而导致逻辑中断,这有点令人沮丧。
data.forEach((previousKey) => {
// ... same logic as above inside that loop loop
}
对于第 2 点,我确实想迭代每个属性。我该如何解决这个 lint 错误?
请指教。谢谢。
最佳答案
只有数组才有forEach
方法; data.forEach
不起作用,因为 data
不是数组。你需要这个
data.forEach((previousKey) => {
成为
Object.keys(data).forEach((previousKey) => {
或者,如果您也想要关联值
Object.entries(data).forEach(([previousKey, value]) => {
For point 2, I do want to iterate over every property.
我认为您也不是故意想要迭代继承的属性。您真的有内部原型(prototype)的属性吗,例如
const obj = Object.create({ foo: 'bar' });
obj.someProp = 'someVal';
,并且您想要迭代 foo
和 someProp
?
这听起来很不寻常——有可能,但很奇怪。这就是为什么 linter 警告您不要使用 for..in
。如果您确实需要迭代继承的属性,请禁用这一行的linter规则(最好,因为这将使代码最简单),或者(更详细地)迭代自己的-使用 Object.keys
修改实例对象的属性,然后对实例的原型(prototype)执行相同的操作,依此类推,直到到达原型(prototype)链的末尾。
关于javascript - for 循环的 Lint 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66067810/