繁体   English   中英

for循环的lint问题

[英]Lint issue with for loop

以下逻辑按预期工作。 我无法更改 lint 规则。
在这种情况下,数据只是一个 Object,如下所示。

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

这是接收上述数据的 function

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。
但这出于某种原因打破了我的逻辑......由于皮棉而导致逻辑中断有点令人沮丧。

data.forEach((previousKey) => {
    // ... same logic as above inside that loop loop
}

对于第 2 点,我确实想遍历每个属性。 我该如何解决这个 lint 错误?

请指教。 谢谢你。

只有 arrays 有forEach方法; data.forEach不起作用,因为data不是数组。 你需要这个

data.forEach((previousKey) => {

成为

Object.keys(data).forEach((previousKey) => {

或者,如果您也想要关联的值

Object.entries(data).forEach(([previousKey, value]) => {

对于第 2 点,我确实想遍历每个属性。

我不认为您也故意要迭代继承的属性。 真的有内部原型的属性吗,例如

const obj = Object.create({ foo: 'bar' });
obj.someProp = 'someVal';

,并且您想遍历foosomeProp

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM