首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以最高性能删除重复项

以最高性能删除重复项
EN

Stack Overflow用户
提问于 2017-08-12 22:44:55
回答 2查看 128关注 0票数 0

如果我想要得到以下结果,是否有人知道函数应该是什么样子:

在:

代码语言:javascript
运行
复制
{
  3: [ "1-2", "4-5" ],
  4: [ "1-2", "6-9" ]
}

输出:

代码语言:javascript
运行
复制
{
  3: [ "4-5" ],
  4: [ "1-2", "6-9" ]
}

我希望删除所有重复的值,并将最后出现的值保留在对象中。如果属性中没有剩余的元素,则应将其删除。我尝试了https://stackoverflow.com/a/9229821/3852382的建议,但没有解决我的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-12 23:15:31

我认为你可以用下面的方法来完成

代码语言:javascript
运行
复制
let obj = {
  3: [ "1-2", "4-5" ],
  4: [ "1-2", "6-9" ]
};

let reverseMap = {};
for(property in obj){
	for(let element of obj[property]){
		if(reverseMap[element] == undefined || reverseMap[element] == null){
			;
		}
		else {
			obj[reverseMap[element]].splice(obj[reverseMap[element]].indexOf(element), 1);
		}
		reverseMap[element] = property;
	}
}

console.log(obj);

票数 0
EN

Stack Overflow用户

发布于 2017-08-13 06:13:27

你可以这样做:

代码语言:javascript
运行
复制
var obj = {3: [ "1-2", "4-5" ], 4: [ "1-2", "6-9" ]},
    res = Object.keys(obj)
                .reduceRight((m,k) => obj[k].reduce((t,e) => t[e] ? t 
                                                                  : (t[e] = true, (t.r[k] = t.r[k] ? t.r[k].concat(e)
                                                                                                   : [e]), t), m), {r:{}}).r;
console.log(res);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45651501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档