我对这个说法感到困惑,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
和两个数组 products
和 filters
的状态变量,每个数组都有对象作为值。
我们正在根据 products
变量中存储的过滤值设置状态变量中的值。
Object.entries
只是returns一个数组,其中每一项都是一个数组,第一个值作为键,第二个值作为对应的值,every
是另一个适用的函数在 Object.entries
函数返回的数组上
every
函数接收一个回调函数作为参数,该函数会测试数组中的所有元素是否都通过回调实现的测试。
本例中实现的测试是item[key].includes(value)
,测试products数组中的每个迭代元素(一个对象)是否有对应key
和value
的数组它。
您可以参考
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
useEffect(() => {
cat &&
setFilteredProducts(
products.filter((item) =>
Object.entries(filters).every(([key, value]) =>
item[key].includes(value)
)
)
);
}, [products, cat, filters]);
我看了一遍又一遍的视频,但我似乎无法正确理解它,谁能帮我逐行解释一下?我明白 "cat &&" 的意思,但其余的让我很困惑。
逐行检查上面的代码:
我假设你有一个带有 setter 函数 setFilteredProducts
和两个数组 products
和 filters
的状态变量,每个数组都有对象作为值。
我们正在根据 products
变量中存储的过滤值设置状态变量中的值。
Object.entries
只是returns一个数组,其中每一项都是一个数组,第一个值作为键,第二个值作为对应的值,every
是另一个适用的函数在 Object.entries
函数返回的数组上
every
函数接收一个回调函数作为参数,该函数会测试数组中的所有元素是否都通过回调实现的测试。
本例中实现的测试是item[key].includes(value)
,测试products数组中的每个迭代元素(一个对象)是否有对应key
和value
的数组它。
您可以参考
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