javascript - 在 Jquery 中使用数组中的 id 过滤对象列表
问题描述
我有一个对象列表,每个对象都有一个特定的代码。还有另一个包含这些特定代码的数组,我想检索与数组中的代码匹配的所有对象。我尝试使用 grep 函数和 indexOf 方法,但没有收到任何结果。有人可以帮我弄这个吗?
var selectedCodes = [2, 12, 15];
var objArray = [
{
"ItemID": "1",
"ItemName": "Name1",
"ItemCode": "1",
},
{
"ItemID": "2",
"ItemName": "Name2",
"ItemCode": "2",
},
{
"ItemID": "3",
"ItemName": "Name3",
"ItemCode": "10",
},
{
"ItemID": "4",
"ItemName": "Name4",
"ItemCode": "12",
},
{
"ItemID": "5",
"ItemName": "Name5",
"ItemCode": "15",
},
{
"ItemID": "6",
"ItemName": "Name6",
"ItemCode": "20",
}
];
根据上面的对象列表和数组,我只需要将Name2、Name4、Name5对象放入不同的列表中。您可以在下面找到我为此使用的代码。但我没有运气
var selectedObjects = $.grep(objArray, function (e) {
return selectedCodes.indexOf(e.ItemCode) > -1;
});
解决方案
对于一个O(n)
解决方案,首先构造一个其键是代码的对象,然后.map
是selectedCodes
:
const objsByCode = {};
for (const item of objArray) {
objsByCode[item.ItemCode] = item;
}
const result = selectedCodes.map(code => objsByCode[code]);
var selectedCodes = [2, 12, 15];
var objArray = [{
"ItemID": "1",
"ItemName": "Name1",
"ItemCode": "1",
},
{
"ItemID": "2",
"ItemName": "Name2",
"ItemCode": "2",
},
{
"ItemID": "3",
"ItemName": "Name3",
"ItemCode": "10",
},
{
"ItemID": "4",
"ItemName": "Name4",
"ItemCode": "12",
},
{
"ItemID": "5",
"ItemName": "Name5",
"ItemCode": "15",
},
{
"ItemID": "6",
"ItemName": "Name6",
"ItemCode": "20",
}
];
const objsByCode = {};
for (const item of objArray) {
objsByCode[item.ItemCode] = item;
}
const result = selectedCodes.map(code => objsByCode[code]);
console.log(result);
不需要像 jQuery 这样的大型库来实现这么简单的事情。
推荐阅读
- python - 为什么我收到错误:创建进程失败?
- sql - 带有包含表变量的 while 条件的 SQL Server 存储过程
- java - java如何将此代码从查找所有真实对象更改为查找错误
- node.js - 获取嵌入 PowerBi Angular 8 的正确令牌
- javascript - react hooks 为什么我的拖放项目卡住了?
- javascript - 在MVC中动态添加时如何在每行上将行号值设置为Textboxfor
- c++ - 自定义 CFileDialog 时如何控制新控件的大小和位置?
- javascript - 如何触发按钮点击按键
- javascript - 在 JavaScript 中添加一个简单的 counter[i] 变量以附加到 wrapper.append(container);
- python - 程序不将值识别为有效的变量值?