比较具有相同属性的两个对象,但将它们混合在一起而不遵循字母规则

时间:2019-04-05 09:15:18

标签: javascript angular unit-testing

如果我有两个对象:

const a = {
   sample: 'this is sample',
   errorMessage: 'status is error'
}

const b = {
   errorMessage: 'status is error'
   sample: 'this is sample',
}

我知道如何按对象的排序键对属性进行排序,但不知道如何将其解析为对象。

示例:

const sortA = JSON.stringify(Object.keys(a).sort) 
const sortB = JSON.stringify(Object.keys(b).sort)

expected(sortA).toEquals(sortB)

3 个答案:

答案 0 :(得分:2)

您可以获取对象的条目,按键排序,获取JSON并比较字符串。

这仅适用于非嵌套对象。

const
    sortBy = k => (a, b) => a[k].localeCompare(b[k]),
    a = { sample: 'this is sample', errorMessage: 'status is error' },
    b = { errorMessage: 'status is error', sample: 'this is sample' },
    sortA = JSON.stringify(Object.entries(a).sort(sortBy(0))),
    sortB = JSON.stringify(Object.entries(b).sort(sortBy(0)));

console.log(sortA === sortB);

答案 1 :(得分:1)

您需要使用toEqual进行对象比较:

expected(sortA).toEqual(sortB)

答案 2 :(得分:0)

您应该创建一个执行此操作的函数:

const a = {
   sample: 'this is sample',
   errorMessage: 'status is error',
};

const b = {
   errorMessage: 'status is error',
   sample: 'this is sample',
};

const c = {
   errorMessage: 'status is error !',
   sample: 'this is sample',
};

const compare = (ob1, ob2) => 
  Object.keys(ob1).length === Object.keys(ob2).length
  && !Object.keys(ob1).some(key => ob2[key] !== ob1[key]);
  
  console.log(compare(a, b));
  console.log(compare(a, c));