for循环的Lint问题



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

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

这是接收上述数据的函数

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

for循环的lint错误如下:

  1. 为. .In循环遍历整个原型链,这实际上从来都不是您想要的。使用对象。{键,值,项},并遍历结果数组
  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) => {

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

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

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

我不认为你故意想迭代继承的属性。你真的在内部原型上有属性吗?例如

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

,你想遍历foosomeProp吗?

这听起来很不寻常——可能,但很奇怪。这就是为什么linter警告你不要使用for..in。如果您确实需要遍历继承的属性,那么可以禁用这一行的linter规则(最好是这样,因为这会使代码更简单),或者(更冗长)使用Object.keys遍历实例对象的own-properties,然后对实例的原型执行相同的操作,以此类推,直到到达原型链的末端。

最新更新