如何编写JS函数对对象按key排序并移除前序key重复的数组元素
JS对象处理函数实现
需求说明
- 将输入对象的key按数值升序排序
- 每个数组先完成自身去重,再从最大key对应的数组开始向前遍历,每个数组需移除所有排在其后方的key对应数组内已经出现过的元素,最终返回处理后的对象
实现代码
function processObj(initialObj) { // 提取所有key转为数值后按升序排序 const sortedKeys = Object.keys(initialObj).map(Number).sort((a, b) => a - b); // 预处理:所有数组先完成自身去重 const dedupedMap = {}; sortedKeys.forEach(key => { dedupedMap[key] = [...new Set(initialObj[key])]; }); const seenElements = new Set(); const result = {}; // 从最大的key开始倒序遍历处理 for (let i = sortedKeys.length - 1; i >= 0; i--) { const currentKey = sortedKeys[i]; // 过滤掉后方数组已经出现过的元素 const filteredArr = dedupedMap[currentKey].filter(item => !seenElements.has(item)); result[currentKey] = filteredArr; // 将当前数组剩余元素加入已出现集合,供前方数组过滤使用 filteredArr.forEach(item => seenElements.add(item)); } return result; }
效果验证
测试用例1
const initialObj1 = { "2": ["A", "B", "D", "A"], "1": ["A", "B", "C"], }; console.log(processObj(initialObj1)); // 输出:{ '1': [ 'C' ], '2': [ 'A', 'B', 'D' ] }
测试用例2
const initialObj2 = { "1": ["C", "F", "G"], "2": ["A", "B", "C"], "3": ["A", "B", "D"], }; console.log(processObj(initialObj2)); // 输出:{ '1': [ 'F', 'G' ], '2': [ 'C' ], '3': [ 'A', 'B', 'D' ] }
内容的提问来源于stack exchange,提问作者Tigran
相关产品推荐
相关产品推荐

