javascript - for 循环的 Lint 问题

标签 javascript eslint

以下逻辑按预期工作。我没有办法改变 lint 规则。
数据在这种情况下只是一个被传入的对象,如下所示。

const testData = {
  item_one: 'item',
};

这是接收上述数据的函数

const convert = (data) => {
  for (const key in data) {
      // ...
  }
  return data;
};

对于我的 for 循环,出现如下 lint 错误:

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

,并且您想要迭代 foosomeProp

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

关于javascript - for 循环的 Lint 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66067810/

相关文章:

javascript - 为什么 componentDidUpdate() 会创建一个无限循环?

javascript - 有没有办法在javascript中将子数组和子子数组合并为一个?

javascript - chrome 对象 console.log 中的奇怪行为

javascript - 根据Service Code对数据进行分组,使用Jquery Datatable展示数据

javascript - eslint 每个函数的最大行数禁用对象速记

javascript - 如何在 ESLint 中使用平面嵌套三元组?

javascript - AngularJS : ng-repeat not executing inside scoped directive

javascript - 使用循环避免 React "no-unused-vars"错误

javascript - 我的配置中哪些 eslint 规则很慢?

javascript - ESLint 与 Promise 一致返回错误