for 循环的 lint 问题
Lint issue with for loop
以下逻辑按预期工作。我没有办法改变 lint 规则。
在这种情况下,
data 只是一个对象,如下所示。
const testData = {
item_one: 'item',
};
这是接收上述数据的函数
const convert = (data) => {
for (const key in data) {
// ...
}
return data;
};
为我的 for 循环获取如下 lint 错误:
- for..in 循环迭代整个原型链,这实际上不是您想要的。使用 Object.{keys,values,entries},并迭代生成的数组
- for-in 的主体应包含在 if 语句中,以从原型中过滤不需要的属性
为了解决第一个问题,尝试将循环切换为 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.
我不认为您也有意迭代 inherited 属性。你真的有内部原型的属性吗,例如
const obj = Object.create({ foo: 'bar' });
obj.someProp = 'someVal';
,并且您想要遍历 foo
和 someProp
?
这听起来很不寻常 - 可能,但很奇怪。这就是 linter 警告您不要使用 for..in
的原因。如果您 do 需要迭代继承的属性,请禁用这一行的 linter 规则(最好,因为这将使代码最简单),或者(更详细地)迭代Object.keys
实例对象的自身属性,然后对实例的原型执行相同的操作,依此类推,直到到达原型链的末尾。
以下逻辑按预期工作。我没有办法改变 lint 规则。
在这种情况下,
data 只是一个对象,如下所示。
const testData = {
item_one: 'item',
};
这是接收上述数据的函数
const convert = (data) => {
for (const key in data) {
// ...
}
return data;
};
为我的 for 循环获取如下 lint 错误:
- for..in 循环迭代整个原型链,这实际上不是您想要的。使用 Object.{keys,values,entries},并迭代生成的数组
- for-in 的主体应包含在 if 语句中,以从原型中过滤不需要的属性
为了解决第一个问题,尝试将循环切换为 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.
我不认为您也有意迭代 inherited 属性。你真的有内部原型的属性吗,例如
const obj = Object.create({ foo: 'bar' });
obj.someProp = 'someVal';
,并且您想要遍历 foo
和 someProp
?
这听起来很不寻常 - 可能,但很奇怪。这就是 linter 警告您不要使用 for..in
的原因。如果您 do 需要迭代继承的属性,请禁用这一行的 linter 规则(最好,因为这将使代码最简单),或者(更详细地)迭代Object.keys
实例对象的自身属性,然后对实例的原型执行相同的操作,依此类推,直到到达原型链的末尾。