在纯/本地JavaScript中比较两个对象的正确代码?

在纯/本地JavaScript中比较两个对象的正确代码?,javascript,if-statement,comparison,compare,Javascript,If Statement,Comparison,Compare,纯/本地JavaScript中的正确代码是什么,如果数据1和数据2都不同,将打开2个新选项卡?但是如果数据1和数据2具有相同的值,则只会打开一个新选项卡?我有一个比较数据1和数据2的值的脚本,但我不知道如何编写比较2个对象的正确代码。我在stackoverflow阅读文章和问题。但我还是不知道该怎么做 例如,当数据1的值与数据2中的值相同时,将弹出一个确认框并打开新选项卡。 但当数据1和2都是不同的值时,会弹出一个两个确认框,第一个是数据1,然后打开新选项卡。第二,对于数据2,再次打开数据2的新

纯/本地JavaScript中的正确代码是什么,如果数据1和数据2都不同,将打开2个新选项卡?但是如果数据1和数据2具有相同的值,则只会打开一个新选项卡?我有一个比较数据1和数据2的值的脚本,但我不知道如何编写比较2个对象的正确代码。我在stackoverflow阅读文章和问题。但我还是不知道该怎么做

例如,当数据1的值与数据2中的值相同时,将弹出一个确认框并打开新选项卡。 但当数据1和2都是不同的值时,会弹出一个两个确认框,第一个是数据1,然后打开新选项卡。第二,对于数据2,再次打开数据2的新选项卡

请帮帮我。我是JavaScript的新手。多谢各位

在代码中:

function scanLapVerification() {
try {
try with no catch表示尝试中至少没有意义。移除它

    //check if the page is activity where address check is done
    var page_title = "Prelim checks - CB BAP";
    var el = getElement(document, "class", "view-operator-verification-title", "");
getElement做什么?它的回报是什么

    if (!el || el.length == 0) return;
    if (el[0].innerText != page_title) return;
    var page_title = '';
页面标题使用一次,其值更改,不再使用。上面这一行似乎没有任何用处

    var el = getElement(document, "class", "workflowActivityDetailPanel", "");
    if (el && el.length > 0) {
如果不知道getElement返回什么,或者它是如何工作的,就不可能判断该测试是否合适

    var eltr = getElement(el[0], "tag", "tr", "");
我猜eltr是tr元素的数组,但我可能错了

    if (eltr && eltr.length > 0) {
            //Read Contact and Permanent address
            var addresses = {
                D1: { province: null, municipality: null, barangay: null, zip: null, street: null, snumber: null }
               ,D2: { province: null, municipality: null, barangay: null, zip: null, street: null, bnumber: null }
            };
            var address_type = null;
很少需要将变量初始化为null,默认情况下,它们被初始化为undefined,这适合大多数用途

            for (var i = 0; i < eltr.length; i++) {
                tr_text = eltr[i].innerText;
这可以是:

    if (/^Data 1/.test(tr_text)) address_type = 'D1';
    if (/^Data 2/.test(tr_text)) address_type = 'D2';
  if (address_type && /^Province/.test(tr_text) {
    addresses[address_type].province = tr_text.replace(/^Province/,'');
  }

这可以是:

    if (/^Data 1/.test(tr_text)) address_type = 'D1';
    if (/^Data 2/.test(tr_text)) address_type = 'D2';
  if (address_type && /^Province/.test(tr_text) {
    addresses[address_type].province = tr_text.replace(/^Province/,'');
  }
等等

[...]
        //Comparing of two objects
        var data1 = addresses.D1.street
                            + '' + addresses.D1.barangay 
                            + '' + addresses.D1.province
                            + '' + addresses.D1.zip;
        data1 = data1 .replace(/\s+/g, ' ').trim();

        var permanent_address = data1 ;

        alert(data1 === data2); //true
        alert(data1 != data2); //false

        return { content: "address_check", data1 : data1 , data2: data2};
您似乎想要比较两个对象,看看它们是否具有相同的自身属性,以及相同的命名属性是否具有相同的值。类似以下的情况可能适合:

function haveSamePropsAndValues(a, b) {

  // Get the own properties of each object
  var aKeys = Object.keys(a);
  var bKeys = Object.keys(b);

  // Compare properties and values
  // If different number of properties, not the same
  if (aKeys.length != bKeys.length) return false;

  // If have same number of properties, compare their names and values
  for (var i=0, iLen=aKeys.length; i<iLen; i++) {

    // Check property names
    if (aKeys[i] != bKeys[i]) return false;

    // Check property values
    if (a[aKeys[i]] != b[bKeys[i]]) return false;
  }
  return true;
}

您似乎有一个自定义的getElement函数,但没有显示或指示返回值是什么。它可能是数组、节点列表或对象。比如说,什么是eltr?@RobG eltr的意思是表rowSee的元素。但是如果两个对象不同,它将打开2个新选项卡,而如果两个对象相同,它将只打开1个新选项卡,该怎么办?请看,我的第二个代码显示我尝试应用您在比较两个对象时给出的代码,但似乎不起作用上面比较了两个对象的属性和值,如何将其应用于打开或关闭选项卡是不相关的。我尝试在代码中将akeys和bkeys更改为原始对象名称,并尝试将其连接到我的现有函数,该函数已发布above@Ying-所以如果你有if contact_address===permanent_address{…}你需要像if have sameprops和values contact_address这样的东西,永久地址{…}。不需要第二个测试,只需使用一个else,因为它们要么相同,要么不同,使用类似ifsame{/*doa*/}else{/*dob*/}的东西。
function haveSamePropsAndValues(a, b) {

  // Get the own properties of each object
  var aKeys = Object.keys(a);
  var bKeys = Object.keys(b);

  // Compare properties and values
  // If different number of properties, not the same
  if (aKeys.length != bKeys.length) return false;

  // If have same number of properties, compare their names and values
  for (var i=0, iLen=aKeys.length; i<iLen; i++) {

    // Check property names
    if (aKeys[i] != bKeys[i]) return false;

    // Check property values
    if (a[aKeys[i]] != b[bKeys[i]]) return false;
  }
  return true;
}
function haveSamePropsAndValues(a, b){
  return JSON.stringify(a).toLowerCase() == JSON.stringify(b).toLowerCase();
}