简体   繁体   English

Ramda:使用动态键过滤 Object

[英]Ramda: Filter Object With Dynamic Keys

I have this object:我有这个 object:

const data = 
{
  "avaiable_items": {"1": [201259, 201303],"2": [201303], "3": [201259]},
  "items": [{"id": "201259","name": "ABC"},{"id": "201303","name": "DEF"}]
}

I need to filter "items" based on "avaiable_items" dynamic keys我需要根据"avaiable_items"动态键过滤"items"

Example if want to filter object based on selected avaiable_items ie "1" , the result will be:例如,如果要根据选定avaiable_items过滤 object,即"1" ,结果将是:

{
"item": [{"id": "201259","name": "ABC"},{"id": "201303","name"}]
}

Does this do what you want?这会做你想要的吗?

const keys = new Set(data.avaiable_items['1']);
data.items.filter(({id}) => keys.has(Number(id)));

Apologies if I have misunderstood, however this should work:如果我误解了,请道歉,但这应该有效:

 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);

The above will just filter (and return) those in items[] which contain an id found in avaiable_items[x] .以上将只过滤(并返回) items[]中的那些包含在avaiable_items[x]中找到的id

A simple vanilla answer would do:一个简单的普通答案就可以:

 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}

Although we could certainly use Ramda's filter and includes in place of the native ones, and could extend this to some point-free version if we tried hard enough, I don't see that it would improve the code at all in this case.虽然我们当然可以使用 Ramda 的filterincludes来代替原生的,并且如果我们足够努力的话可以将其扩展到一些无点版本,但我认为在这种情况下它根本不会改进代码。

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

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