admin管理员组文章数量:1201353
I'm working with cucumber js and I want to fill out some fields in an application, so i'm using a for-in to get the data from the rowHash but i'm getting the error message "The body of a for-in should be wrapped in an if statement to filter unwanted properties from the prototype guard-for-in" i'm not sure how I should code my for-in with the if inside the for.
this is my code:
this.fillRequiredfields = function(dataTable){
var rows = dataTable.rowsHash();
for (var row in rows) {
var val = rows[row];
if (row === 'firstname') {
element(by.name('firstName')).sendKeys(val).isPresent();
}
if (row === 'lastname') {
element(by.name('lastName')).sendKeys(val).isPresent();
}
if (row === 'emailaddress') {
element(by.name('emailAddress')).sendKeys(val).isPresent();
}
if (row === 'displayname') {
element(by.name('displayName')).sendKeys(val).isPresent();
}
if (row === 'password') {
element(by.name('newPassword')).sendKeys(val).isPresent();
}
}
};
So when I try to do the commit in git i'm getting the "guard-for-in" from eslint. If somebody can explain me how I should do the if in the for-in that could be good.
Hope you can help me.
I'm working with cucumber js and I want to fill out some fields in an application, so i'm using a for-in to get the data from the rowHash but i'm getting the error message "The body of a for-in should be wrapped in an if statement to filter unwanted properties from the prototype guard-for-in" i'm not sure how I should code my for-in with the if inside the for.
this is my code:
this.fillRequiredfields = function(dataTable){
var rows = dataTable.rowsHash();
for (var row in rows) {
var val = rows[row];
if (row === 'firstname') {
element(by.name('firstName')).sendKeys(val).isPresent();
}
if (row === 'lastname') {
element(by.name('lastName')).sendKeys(val).isPresent();
}
if (row === 'emailaddress') {
element(by.name('emailAddress')).sendKeys(val).isPresent();
}
if (row === 'displayname') {
element(by.name('displayName')).sendKeys(val).isPresent();
}
if (row === 'password') {
element(by.name('newPassword')).sendKeys(val).isPresent();
}
}
};
So when I try to do the commit in git i'm getting the "guard-for-in" from eslint. If somebody can explain me how I should do the if in the for-in that could be good.
Hope you can help me.
Share Improve this question asked Jan 11, 2018 at 20:14 burq24burq24 2991 gold badge5 silver badges18 bronze badges 2- 4 The eslint documentation for this rule has an example of correct usage. – CRice Commented Jan 11, 2018 at 20:17
- Yeah but i don't get what is mean the " if (Object.prototype.hasOwnProperty.call(foo, key)) { doSomething(key); }" – burq24 Commented Jan 11, 2018 at 20:45
4 Answers
Reset to default 12I already solve this, in my case the solution was:
instead of
var val = rows[row];
I add the if with the hasOwnProperty(), like this:
if (rows.hasOwnProperty(row))
So the code is like this:
for (var row in rows) {
if (rows.hasOwnProperty(row)){
if (row === 'firstname') {
element(by.name('firstName')).sendKeys(rows[row]).isPresent();
}
if (row === 'lastname') {
element(by.name('lastName')).sendKeys(rows[row]).isPresent();
}
if (row === 'emailaddress') {
element(by.name('emailAddress')).sendKeys(rows[row]).isPresent();
}
if (row === 'displayname') {
element(by.name('displayName')).sendKeys(rows[row]).isPresent();
}
if (row === 'password') {
element(by.name('newPassword')).sendKeys(rows[row]).isPresent();
}
}
}
Hope can help to somebody else.
In some rare cases
if (rows.hasOwnProperty(row))
might trigger undesired effect (for example if this is a function hasOwnProperty()). So this is why suggested method is
Object.prototype.hasOwnProperty.call(rows, row)
You can also use the for...of
statement (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) so your code would be something like:
for (var row of Object.keys(rows)) {
if (row === 'firstname') {
element(by.name('firstName')).sendKeys(rows[row]).isPresent();
}
[...]
}
Here is another variation of getting around guard-for-in
using an array method.
Object.entries(rows).forEach(([key, value]) => {
if (value === 'firstname') {
element(by.name('firstName')).sendKeys(val).isPresent();
}
// ...
});
本文标签: javascripteslint error quotguardforinquot not clear how to work with forinStack Overflow
版权声明:本文标题:javascript - eslint error "guard-for-in" not clear how to work with for-in - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1738541577a2095596.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论