如何高效实现JavaScript对象所有属性两两互不相等的条件判断
优化实现方案
核心逻辑借助Set数据结构的自动去重特性实现:将对象所有属性值提取为数组后转成Set,若Set的长度和原数组长度完全相等,就说明所有属性值两两互不相等。该方案不需要手动编写两两比较语句,不管对象属性数量有多少,判断逻辑都不需要改动。
优化后的代码如下:
var obj = { 1: linksArray[randomNumber], 2: linksArray[randomNumber2], 3: linksArray[randomNumber3] } const valueList = Object.values(obj) // Set长度与原数组长度相等即所有值唯一 if(new Set(valueList).size === valueList.length) { arr.push(...valueList) break }
补充说明:
- 上述方案适用于属性值为数字、字符串、布尔值等基本类型的场景,如果属性值是对象、数组这类引用类型,由于Set对比引用类型时判断的是内存地址而非实际内容,需要先把值序列化后再做判断,示例如下:
const valueList = Object.values(obj).map(item => JSON.stringify(item)) if(new Set(valueList).size === valueList.length) { // 执行业务逻辑 }
- 你原有代码中的判断存在大量冗余逻辑,比如
obj[1]!=obj[2]和obj[2]!=obj[1]完全等价,就算手动写两两比较,N个属性仅需要写N*(N-1)/2次判断即可,不需要写N²次重复判断。
内容的提问来源于stack exchange,提问作者Андрей Романов
相关产品推荐
相关产品推荐

