繁体   English   中英

Ramda:使用动态键过滤 Object

[英]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 的filterincludes来代替原生的,并且如果我们足够努力的话可以将其扩展到一些无点版本,但我认为在这种情况下它根本不会改进代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM