我不明白 every() 方法如何知道它应该比较哪些项目。有什么见解吗?

I don't understand how the every() method knows which items it is supposed to compare. Any insights?

我有一个数组...

const order = [['sunglasses', 1], ['bags', 2]];

...一个对象...

const inventory = {
  sunglasses: 1900,
  pants: 1088,
  bags: 1344
};

...以及函数体中的以下参数:

let inStock = order.every(item => inventory[item[0]] >= item[1]);

我知道 every() 已在数组 order 上被调用,并将 return 一个布尔值基于呈现的条件(通俗地说,如果库存中有足够的物品来完成订单,则 return 为真,否则 return 为假)。问题是,我无法理解 every() 方法如何知道应该比较哪些项目以及 [0][= 的索引究竟是什么26=]和[1]表示在这种情况下。

在提供给 every 的回调中,第一个参数是被迭代的项目,并且为数组中的每个元素调用回调,直到其中一个回调 return 出现错误,或者直到数组用完。

您可以像这样自己实现它:

Array.prototype.myEvery = function(callback) {
  for (const element of this) {
    const result = callback(element);
    if (!result) return false;
  }
  return true;
}

所以这里

.every(item => inventory[item[0]] >= item[1]);

item 是被迭代的数组中的一项 - 例如 ['sunglasses', 1]['bags', 2]。然后括号符号从子数组中提取值,它变成了类似

inventory['sunglasses'] >= 1

inventory['bags'] >= 2

结果为 returned。如果所有回调 return 为真值,则 .every 调用的结果为 true.

简单说明

库存是一个查找table,item[0] 是传递给 every 的商品名称,item[1] 是订单中的商品数量

订单的每次迭代都会将 [商品名称,商品数量] 传递给函数。 itemname 用于查找库存,并且项目数量与库存数量进行比较。都必须匹配才能满足every