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 错误:

  1. for..in 循环迭代整个原型链,这实际上不是您想要的。使用 Object.{keys,values,entries},并迭代生成的数组
  2. 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';

,并且您想要遍历 foosomeProp?

这听起来很不寻常 - 可能,但很奇怪。这就是 linter 警告您不要使用 for..in 的原因。如果您 do 需要迭代继承的属性,请禁用这一行的 linter 规则(最好,因为这将使代码最简单),或者(更详细地)迭代Object.keys 实例对象的自身属性,然后对实例的原型执行相同的操作,依此类推,直到到达原型链的末尾。