以下逻辑按预期工作。我没有办法改变布线规则。数据
在这种情况下,只是一个传入的对象,如下面所示。
const testData = {
item_one: 'item',
};
这是接收上述数据的函数
const convert = (data) => {
for (const key in data) {
// ...
}
return data;
};
for循环的lint错误如下:
- 为. .In循环遍历整个原型链,这实际上从来都不是您想要的。使用对象。{键,值,项},并遍历结果数组
- 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';
,你想遍历foo
和someProp
吗?
这听起来很不寻常——可能,但很奇怪。这就是为什么linter警告你不要使用for..in
。如果您确实需要遍历继承的属性,那么可以禁用这一行的linter规则(最好是这样,因为这会使代码更简单),或者(更冗长)使用Object.keys
遍历实例对象的own-properties,然后对实例的原型执行相同的操作,以此类推,直到到达原型链的末端。