API Puller中的代码块,我无法判断发生了什么

时间:2019-05-08 14:35:41

标签: javascript json

我们团队中的数据工程师编写了一个程序,用于从某个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)
    }
  }
}

似乎它检查一个项目是否为数组,然后对数组键的值做一些处理??

1 个答案:

答案 0 :(得分:2)

for..in循环将遍历对象的属性。数组索引(array[0]array[1]等)也只是对象属性。遍历对象的属性时,通常希望检查hasOwnProperty以避免遍历对象原型的方法和其他属性,而仅遍历“对象本身的实际值”。

因此,此循环似乎结合了对数组和对象的迭代。如果是数组,则检查属性/索引是否为< array.length,否则进行常规的hasOwnProperty检查。

我要说您不应该这样做,首先是因为您应该知道是要处理对象还是数组,其次,因为这种组合用法充其量会使您感到困惑(由这个问题解答)。

另请参阅Why is using "for...in" with array iteration a bad idea?