我有一系列产品和用户可以访问的一系列产品。它们共享一个公共ID。我想过滤产品数组以仅返回用户有权访问的产品。
所有产品(products
)
[{
"productName": "My Product"
"p_id": "1"
},...
]
我的可用产品(myProducts
)
[
{
"i_items": "[{\"act\":\"new\",\"app\":\"nexus\",\"type\":\"package\",\"cost\":\"0.00\",\"tax\":null,\"quantity\":1,\"itemName\":\"My Product\",\"itemID\":1,\"physical\":false,\"methods\":\"*\",\"cfields\":[],\"extra\":null,\"renew_term\":1,\"renew_units\":\"m\",\"renew_cost\":\"100.00\",\"grace_period\":86400}]"
},...
]
编辑:
以下解决方案返回[]
// Extract available IDs into a Set:
const availableIds = new Set(this.myProducts.flatMap(({i_items}) =>
JSON.parse(i_items).map(item => ""+item.itemID))
);
console.log(availableIds); //Set(1) {"3"}
// Use the Set to filter the products:
console.log(availableIds.has("3")); //true
const filtered = this.products.filter(({p_id}) => availableIds.has(p_id));
console.log(filtered); // []
最终编辑:感谢所有提供帮助的人。最后一个问题是由于未将ID强制转换为字符串引起的。一旦我更改了availableIds.has(p_id)
-> availableIds.has(""+p_id)
,它就起作用了。
答案 0 :(得分:2)
您可以使用map
和JSON.parse
从第二个数据集中提取itemID
值,并将其转换为Set
。然后使用该集合对产品数据应用filter
:
// Sample data
const allProducts = [{"productName": "My Product","p_id": "1"},{"productName": "My unused Product","p_id": "4"},{"productName": "My Other Product","p_id": "5"},{"productName": "My unused Product 2","p_id": "6"},{"productName": "My luxury Product","p_id": "9"},{"productName": "My lucky Product","p_id": "13"}];
const available = [{"i_items": "[{\"itemID\":1},{\"itemID\":13}]"},{"i_items": "[{\"itemID\":5},{\"itemID\":9}]"}];
// Extract available IDs into a Set:
const availableIds = new Set(available.flatMap(({i_items}) =>
JSON.parse(i_items).map(item => ""+item.itemID))
);
// Use the Set to filter the products:
const filtered = allProducts.filter(({p_id}) => availableIds.has(p_id));
console.log(filtered);
答案 1 :(得分:1)
正如其他人所说,这是解析可用项目,然后检查是否存在相关ID的情况:
Iterator<? extends ICard> iterator(