在纯/本地JavaScript中比较两个对象的正确代码?
纯/本地JavaScript中的正确代码是什么,如果数据1和数据2都不同,将打开2个新选项卡?但是如果数据1和数据2具有相同的值,则只会打开一个新选项卡?我有一个比较数据1和数据2的值的脚本,但我不知道如何编写比较2个对象的正确代码。我在stackoverflow阅读文章和问题。但我还是不知道该怎么做 例如,当数据1的值与数据2中的值相同时,将弹出一个确认框并打开新选项卡。 但当数据1和2都是不同的值时,会弹出一个两个确认框,第一个是数据1,然后打开新选项卡。第二,对于数据2,再次打开数据2的新选项卡 请帮帮我。我是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的新
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();
}