jQuery中匹配数组与对象值并重构对象的技术求助
类数组对象的筛选与重构方案
原代码问题分析
你的现有代码存在两个核心问题:
- 匹配逻辑错误:通过索引位置同时遍历
array_1和array_2,仅当同一索引下的元素值匹配时才筛选,这和需求中「array_2的id存在于array_1中」的要求不符。 - 类型未统一:
array_1中的id是字符串类型,array_2中的id是数字类型,虽然后者用==能隐式转换,但这种写法不严谨,容易引发潜在问题。
解决方案代码
以下是修正后的完整代码,实现需求中的筛选与重构:
$(document).ready(function(){ var array_1 = ['58', '10']; // 将array_1转为Set,提升查找效率,同时统一匹配类型 const targetIds = new Set(array_1); var array_2 = {}; array_2[0] = {'id':55, 'name':'raj'}; array_2[1] = {'id':58, 'name':'min'}; array_2[2] = {'id':10, 'name':'max'}; array_2[3] = {'id':12, 'name':'res'}; // 筛选出id存在于targetIds中的项 const filteredItems = Object.values(array_2).filter(item => { // 将item.id转为字符串,和Set中的类型统一 return targetIds.has(String(item.id)); }); // 重构为连续索引的类数组对象 const newArray2 = {}; filteredItems.forEach((item, index) => { newArray2[index] = item; }); console.log(newArray2); // 输出结果: // {0: {id: 58, name: 'min'}, 1: {id: 10, name: 'max'}} });
关键步骤说明
- 使用Set优化查找:将
array_1转换为Set结构,查找元素的时间复杂度从数组的O(n)降到O(1),数据量大时效率提升明显。 - 统一数据类型:将
array_2中对象的id转为字符串后再匹配,避免类型隐式转换带来的不确定性。 - 筛选与重构分离:先用
Object.values(array_2)获取类数组的所有值,通过filter筛选符合条件的项;再遍历筛选结果,构建索引连续的新类数组对象,完全符合你的期望输出结构。
可选简化方案
如果最终结果不需要严格的类数组对象,直接使用筛选后的数组即可(结构和你期望的一致):
// 直接使用筛选后的数组,结构为 [ {id:58, name:'min'}, {id:10, name:'max'} ] const newArray2 = filteredItems;
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

