确保两个单独的对象具有唯一的全部键集

时间:2017-08-15 19:53:34

标签: javascript json node.js dictionary

我有一个JS框架,用户可以注入来自两个不同文件的值。可注入值由返回对象的键标识。问题是拥有两个单独的文件意味着密钥可能会发生冲突。

如果我有两个这样的JS对象:

let one = {
  foo: null,
  bar: null
}

let two = {
  foo: null,
  baz: null
}

是否有某种方法可以确保密钥在这两个对象中是唯一的?我不认为有一个很好的方法可以做到这一点,只是寻找一些可能的想法。显然,上面的两个对象"冲突"因为它们都包含密钥" foo"。

3 个答案:

答案 0 :(得分:3)

一个vanilla js解决方案:

 if(!Object.keys(one).every(key => !(key in two))) alert("dupe");

答案 1 :(得分:1)

您可以合并两个数组键,看看是否有重复的

const one = {
  foo: null,
  bar: null
}

const two = {
  foo: null,
  baz: null
}

const array = Object.keys(one).concat(Object.keys(two));
const hasDuplicate = array.filter((item, index) => {
    return array.indexOf(item) !== -1 && index !== array.indexOf(item)
}).length !== 0;

答案 2 :(得分:1)

只需检查另一组中是否有任何键。如果是这样,它们并不是唯一的。这里需要使用some MDN,因为它会在匹配条件下提前中断。

function unique(obj1,obj2){
    var o2Keys = Object.keys(obj2);
    return !Object.keys(obj1).some(k => o2Keys.some(k2 => k == k2));
}

let o1 = { foo: null, bar: null };
let o2 = { foo: null, bar: null };
let o3 = { foobar: null };
let o4 = { bar: null };

console.log(unique(o1,o2)); //false
console.log(unique(o1,o3)); //true
console.log(unique(o1,o4)); //false