javascript - Javascript通过另一个对象数组的键过滤对象数组
问题描述
我有一系列产品和用户可以访问的一系列产品。他们共享一个共同的 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)
它就起作用了。
解决方案
您可以使用map
and从第二个数据集中JSON.parse
提取itemID
值,并将它们转换为Set
. 然后filter
使用该集合对产品数据应用 a:
// 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);
推荐阅读
- django - 如何从 vue.js 中的请求中获取 DRF 中的 self.request.user?
- asp.net-core-mvc - 在 asp.net core mvc 中实现从内部布局搜索
- javascript - JS 错误:错误:参数“可取消”需要 GCancellable 类型的对象,但得到了字符串类型
- php - PHP仅在其他索引匹配时按列过滤多维数组
- python-3.x - Chromedriver 使用 Docker 文件安装,但 chrome 驱动程序未反映在上述目录中
- r - 我应该在 RMarkdown 中正确显示谁的 vtable?
- anylogic - AnyLogic 无法正确读取 Excel 字符串值
- r - 拆分表示时间的字符串并以秒为单位提取值
- javascript - 由于看似无关的库,对象范围规则似乎发生了变化?
- google-cloud-platform - 将自定义域映射到 GCP API 网关