我们团队中的数据工程师编写了一个程序,用于从某个API中提取数据,但是,...它不起作用。我的任务是修复它,所以我一直在研究,现在我试图弄清楚这段代码的作用。
async function asyncForEach(array, callback) {
const isArray = Array.isArray(array)
for (const key in array) {
if (isArray ? key < array.length : array.hasOwnProperty(key)) {
const val = array[key]
await callback(val, key)
}
}
}
似乎它检查一个项目是否为数组,然后对数组键的值做一些处理??
答案 0 :(得分:2)
for..in
循环将遍历对象的属性。数组索引(array[0]
,array[1]
等)也只是对象属性。遍历对象的属性时,通常希望检查hasOwnProperty
以避免遍历对象原型的方法和其他属性,而仅遍历“对象本身的实际值”。
因此,此循环似乎结合了对数组和对象的迭代。如果是数组,则检查属性/索引是否为< array.length
,否则进行常规的hasOwnProperty
检查。
我要说您不应该这样做,首先是因为您应该知道是要处理对象还是数组,其次,因为这种组合用法充其量会使您感到困惑(由这个问题解答)。
另请参阅Why is using "for...in" with array iteration a bad idea?。