我无法理解此javascript代码的行为。
const devices = searchResult.results.forEach(device => {
const temp = Object.keys(device.fields);
for(var property in temp) {
if(device.fields.hasOwnProperty(property)) {
if (!usedPropertiesAcrossModels.has(property)) {
delete device.fields[property];
}
}
}
}
如果javascript对象不属于某个集合,我试图删除这些键。我已经逐步完成了调试器,我知道集合中只有一个元素,device.fields
中只有15个元素。无论如何,从device.fields
中删除任何内容,我都不知道为什么。此外,temp
似乎未定义,直到我离开循环。即使临时文件中有项目,Property
也始终未定义!这没有任何意义。
答案 0 :(得分:0)
<div #myList>
<div *ngFor="let item of items; let last = last">
{{item.title}}
{{last ? scrollToBottom() : ''}}
</div>
</div>
scrollToBottom() {
this.myList.nativeElement.scrollTop = this.myList.nativeElement.scrollHeight;
}
使用map修复了问题,就像在你的情况下,for in给出了索引而不是对象的键。或者像马丁所说的那样你可以考虑使用for。
答案 1 :(得分:-1)
const temp = Object.keys(o)
将为您提供对象数组的键。您应该使用for of
循环而不是for in
,因为您需要迭代它的值,而不是temp
对象中的键:
const o = { a: 1, b: 2, c: 3 };
const temp = Object.keys(o);
console.log(temp);
// this will iterate through `temp` keys, so 0, 1, 2
for (const property in temp) {
console.log('wrong:', property);
}
// this will iterate through `temp` values, so 'a', 'b', 'c'
for (const property of temp) {
console.log('correct:', property);
}
// or you could iterate via `forEach()`
temp.forEach(property => {
console.log('correct:', property);
});
同样使用for of
循环,您不需要hasOwnProperty
检查。