【发布时间】:2020-12-09 20:20:57
【问题描述】:
我有以下对象数组,表示产品的所有可能组合
[{id:25,attributes:[{id: 0, name: "Weight", option: "250gr"},{id: 0, name: "Roast", option: "Medium"},{id: 0, name: "Packaging", option: "Card"}
{id:26,attributes:[{id: 0, name: "Weight", option: "500gr"},{id: 0, name: "Roast", option: "Medium"},{id: 0, name: "Packaging", option: "Card"}
{id:27,attributes:[{id: 0, name: "Weight", option: "250gr"},{id: 0, name: "Roast", option: "Light"},{id: 0, name: "Packaging", option: "Card"}
{id:28,attributes:[{id: 0, name: "Weight", option: "250gr"},{id: 0, name: "Roast", option: "Light"},{id: 0, name: "Packaging", option: "Tin"}
]
在网页上,通过选择设置选项; select 还设置了一个 state 组件如下:
{Weight:"",Roast:"",Pakaging:""}
使用所选选项中的值,例如(假设仅选择重量和烘烤):
{Weight:"250gr",Roast:"Light",Packaging:""}
每次选择一个选项时,我都想缩小产品组合(基于选择),直到我最终只有一个选项可用(该组合也用于动态重新填充选择,根据先前的添加或删除可用选项选择)
直到现在我都在使用类似的东西(在 onChange 在选择上调用的函数内部):
const result = variations.filter((p) =>
p.attributes.some((c) => c.option === event.target.value)
);
但是这种方式会根据最新的选择减少,所以如果我开始选择 250gr,它会给我一组 3 (25,27,28) 那么如果我选择中等,它会给我一组 2(25 和 26)只过滤中等并忽略重量
我正在寻找转换我的过滤器,而不是在 event.target.value 上的对象上,但我找不到正确的方法,有人可以帮忙吗?
【问题讨论】:
-
你能发布完整的代码以便更好地了解你在做什么吗?
-
@MosheSommers 这是我的代码 codesandbox.io/s/elegant-tereshkova-7uovc?file=/src/App.js
标签: javascript arrays reactjs filter