当前位置: 首页 > news >正文

网页网站建设的步骤流程/怎么seo网站关键词优化

网页网站建设的步骤流程,怎么seo网站关键词优化,移动网站开发,评价高的企业网站开发深度比较两个javaScript对象 1、写在前面 近日遇到的一个需求需要比较两个对象,对象的属性类型相同,属性的值相同,就认为是两个对象是相同的,唯恐自己写的方法不够精炼,因此google找到了解决办法,特此记下。…

深度比较两个javaScript对象

1、写在前面

近日遇到的一个需求需要比较两个对象,对象的属性类型相同,属性的值相同,就认为是两个对象是相同的,唯恐自己写的方法不够精炼,因此google找到了解决办法,特此记下。
方法出处:http://stackoverflow.com/questions/1068834/object-comparison-in-javascript

2、方法一:Object.toJSON()或 JSON.stringify()

此方法简单,适用于当两个对象的属性顺序相同的时候。
var user1 = {name : "nerd", org: "dev"};
var user2 = {name : "nerd", org: "dev"};
var eq = user1 == user2;
alert(eq); // gives false// var eq1 = Object.toJSON(user1) == Object.toJSON(user2);
var eq1 = JSON.stringify(user1) === JSON.stringify(user2)
alert(eq1); // gives true

3、方法二、深度比较两个对象(推荐)

深度比较两个对象,当对象的属性类型相同且属性的值相同(对象的顺序可以不一样),两个对象就相等。
function deepCompare(x, y) {var i, l, leftChain, rightChain;function compare2Objects(x, y) {var p;// remember that NaN === NaN returns false// and isNaN(undefined) returns trueif (isNaN(x) && isNaN(y) && typeof x === 'number' && typeof y === 'number') {return true;}// Compare primitives and functions.     // Check if both arguments link to the same object.// Especially useful on the step where we compare prototypesif (x === y) {return true;}// Works in case when functions are created in constructor.// Comparing dates is a common scenario. Another built-ins?// We can even handle functions passed across iframesif ((typeof x === 'function' && typeof y === 'function') ||(x instanceof Date && y instanceof Date) ||(x instanceof RegExp && y instanceof RegExp) ||(x instanceof String && y instanceof String) ||(x instanceof Number && y instanceof Number)) {return x.toString() === y.toString();}// At last checking prototypes as good as we canif (!(x instanceof Object && y instanceof Object)) {return false;}if (x.isPrototypeOf(y) || y.isPrototypeOf(x)) {return false;}if (x.constructor !== y.constructor) {return false;}if (x.prototype !== y.prototype) {return false;}// Check for infinitive linking loopsif (leftChain.indexOf(x) > -1 || rightChain.indexOf(y) > -1) {return false;}// Quick checking of one object being a subset of another.// todo: cache the structure of arguments[0] for performancefor (p in y) {if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {return false;} else if (typeof y[p] !== typeof x[p]) {return false;}}for (p in x) {if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {return false;} else if (typeof y[p] !== typeof x[p]) {return false;}switch (typeof(x[p])) {case 'object':case 'function':leftChain.push(x);rightChain.push(y);if (!compare2Objects(x[p], y[p])) {return false;}leftChain.pop();rightChain.pop();break;default:if (x[p] !== y[p]) {return false;}break;}}return true;}if (arguments.length < 1) {return true; //Die silently? Don't know how to handle such case, please help...// throw "Need two or more arguments to compare";}for (i = 1, l = arguments.length; i < l; i++) {leftChain = []; //Todo: this can be cachedrightChain = [];if (!compare2Objects(arguments[0], arguments[i])) {return false;}}return true;}

可以把方法compare2Objects修改成自己想要的条件,比如说不限制属性的类型,只要属性的值相等就认为两个object相等。

相关文章: