我对这个说法感到困惑,Object.entries

I'm confused about this statement, Object.entries

useEffect(() => {
  cat &&
    setFilteredProducts(
      products.filter((item) =>
        Object.entries(filters).every(([key, value]) =>
          item[key].includes(value)
        )
      )
    );
}, [products, cat, filters]);

我看了一遍又一遍的视频,但我似乎无法正确理解它,谁能帮我逐行解释一下?我明白 "cat &&" 的意思,但其余的让我很困惑。

逐行检查上面的代码:

我假设你有一个带有 setter 函数 setFilteredProducts 和两个数组 productsfilters 的状态变量,每个数组都有对象作为值。

我们正在根据 products 变量中存储的过滤值设置状态变量中的值。

Object.entries只是returns一个数组,其中每一项都是一个数组,第一个值作为键,第二个值作为对应的值,every是另一个适用的函数在 Object.entries 函数返回的数组上

every函数接收一个回调函数作为参数,该函数会测试数组中的所有元素是否都通过回调实现的测试。

本例中实现的测试是item[key].includes(value),测试products数组中的每个迭代元素(一个对象)是否有对应keyvalue的数组它。

您可以参考 Object.entries 这里:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries

Array.prototype.every: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every

Array.prototype.filter: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

Array.prototype.includes: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes