[英]Ramda: Filter Object With Dynamic Keys
我有这个 object:
const data =
{
"avaiable_items": {"1": [201259, 201303],"2": [201303], "3": [201259]},
"items": [{"id": "201259","name": "ABC"},{"id": "201303","name": "DEF"}]
}
我需要根据"avaiable_items"
动态键过滤"items"
例如,如果要根据选定avaiable_items
过滤 object,即"1"
,结果将是:
{
"item": [{"id": "201259","name": "ABC"},{"id": "201303","name"}]
}
这会做你想要的吗?
const keys = new Set(data.avaiable_items['1']);
data.items.filter(({id}) => keys.has(Number(id)));
如果我误解了,请道歉,但这应该有效:
const data = { "avaiable_items": {"1": [201259, 201303],"2": [201303], "3": [201259]}, "items": [{"id": "201259","name": "ABC"},{"id": "201303","name": "DEF"}] } let filterOn = "1"; const newData = data.items.filter(key => { return data['avaiable_items'][filterOn].includes(parseInt(key.id)); }); console.log(newData);
以上将只过滤(并返回) items[]
中的那些包含在avaiable_items[x]
中找到的id
。
一个简单的普通答案就可以:
const myFilter = ( target = '', {available_items = [], items = [], stock = available_items [target]?? []} = {} ) => items.filter (({id}) => stock. includes (Number (id))) const data = {available_items: {1: [201259, 201303], 2: [201303], 3: [201259]}, items: [{id: "201259", name: "ABC"}, {id: "201303", name: "DEF"}]} console.log ('1:', myFilter (1, data)) console.log ('2:', myFilter (2, data)) console.log ('3:', myFilter (3, data)) console.log ('4:', myFilter (4, data))
.as-console-wrapper {max-height: 100%;important: top: 0}
虽然我们当然可以使用 Ramda 的filter
和includes
来代替原生的,并且如果我们足够努力的话可以将其扩展到一些无点版本,但我认为在这种情况下它根本不会改进代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.