<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kane&#039;s Blog &#187; json</title>
	<atom:link href="http://iamkane.com/index.php/archives/tag/json/feed" rel="self" type="application/rss+xml" />
	<link>http://iamkane.com</link>
	<description>Bug can be anywhere,Can you find it?</description>
	<lastBuildDate>Mon, 21 Jun 2010 11:05:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>2组 json diff 对比</title>
		<link>http://iamkane.com/index.php/archives/54</link>
		<comments>http://iamkane.com/index.php/archives/54#comments</comments>
		<pubDate>Wed, 02 Dec 2009 14:12:19 +0000</pubDate>
		<dc:creator>Kane</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://iamkane.com/?p=54</guid>
		<description><![CDATA[/** *@jsonDataHandler.diff(json1,json2) */ Array.prototype.compareTo = function(compareAry) { if (this.length === compareAry.length) { var i; for (i = 0; i &#60; compareAry.length; i+=1) { if (Object.isArray(this[i]) === true) { if (this[i].compareTo(compareAry[i]) === false) { return false; } continue; } else if (this[i] !== compareAry[i]) { return false; } } return true; } return false; }; (function() [...]]]></description>
			<content:encoded><![CDATA[<p><code>
<pre class="brush: jscript;">

/**
*@jsonDataHandler.diff(json1,json2)
*/

Array.prototype.compareTo = function(compareAry) {
if (this.length === compareAry.length) {
var i;
for (i = 0; i &lt; compareAry.length; i+=1) {
if (Object.isArray(this[i]) === true) {
if (this[i].compareTo(compareAry[i]) === false) {
return false;
}
continue;
}
else if (this[i] !== compareAry[i]) {
return false;
}
}
return true;
}
return false;
};

(function() {
var _toString = Object.prototype.toString;
function extend(destination, source) {
for (var property in source)
destination[property] = source[property];
return destination;
}
function keys(object) {
var results = [];
for (var property in object)
results.push(property);
return results;
}
function isArray(object) {
return _toString.call(object) == &quot;[object Array]&quot;;
}
extend(Object, {
extend:        extend,
keys:          keys,
isArray:       isArray
});
})();
(function() {
var arrayProto = Array.prototype;

function indexOf(item, i) {
i || (i = 0);
var length = this.length;
if (i &lt; 0) i = length + i;
for (; i &lt; length; i++)
if (this[i] === item) return i;
return -1;
}

if (!arrayProto.indexOf) arrayProto.indexOf = indexOf;

})();
var jsonDataHandler = {
merge: function(j1, j2) {
if (typeof this.merging === &quot;undefined&quot; || this.merging === 0) {
this.mergeCyclicCheck = [];
this.merging = 0;
}
this.merging += 1;
if (typeof j1 === &quot;undefined&quot;) {
j1 = {};
}
if (typeof j2 === &quot;undefined&quot;) {
j2 = {};
}
if (typeof this.mergeCyclicCheck === &quot;undefined&quot;) {
this.mergeCyclicCheck = [];
}
var key;
for (key in j2) if (j2.hasOwnProperty(key)) {
if (typeof j1[key] === &quot;undefined&quot;) {
j1[key] = j2[key];
}
else {
if (typeof j2[key] === &quot;object&quot;) {
if (this.mergeCyclicCheck.indexOf(j1[key]) &gt;= 0) {
break;
}
this.merge(j1[key], j2[key]);
this.mergeCyclicCheck.push(j1[key]);
}
else {
j1[key] = j2[key];
}
}
}
this.merging -= 1;
},
diff: function(j1, j2) {
if (typeof this.diffing === &quot;undefined&quot; || this.diffing === 0) {
this.diffCyclicCheck = [];
this.diffing = 0;
}
var diffRes = {};
this.diffing += 1;
if (typeof j1 === &quot;undefined&quot;) {
j1 = {};
}
if (typeof j2 === &quot;undefined&quot;) {
j2 = {};
}
if (typeof this.diffCyclicCheck === &quot;undefined&quot;) {
this.diffCyclicCheck = [];
}
var key, bDiff;
for (key in j2) if (j2.hasOwnProperty(key)) {
bDiff = false;
if (typeof j1[key] === &quot;undefined&quot; || typeof j1[key] != typeof j2[key]) {
bDiff = true;
}
else if (j1[key] !== j2[key]) {
if (typeof j2[key] === &quot;object&quot;) {
if (this.diffCyclicCheck.indexOf(j2[key]) &gt;= 0) {
break;
}
else if (Object.isArray(j2[key])) {
if (j1[key].length !== j2[key].length || j1[key] !== j2[key]) {
if (j2[key].compareTo(j1[key]) === false) {
bDiff = true;
}
}
}
else if (typeof j1[key] === &quot;object&quot;) {
var dR = this.diff(j1[key], j2[key]);
if (Object.keys(dR).length &gt; 0) {
diffRes[key] = dR;
}
}
else {
bDiff = true;
}
this.diffCyclicCheck.push(j2[key]);
}
else if (j1[key] !== j2[key]) {
bDiff = true;
}
}
if (bDiff) {
diffRes[key] = j2[key];
}
}
for (key in j1) if (j1.hasOwnProperty(key)) {
bDiff = false;
if (typeof j2[key] === &quot;undefined&quot;) {
diffRes[key] = j1[key];
}
}
this.diffing -= 1;
return diffRes;
}
};
</pre>
]]></content:encoded>
			<wfw:commentRss>http://iamkane.com/index.php/archives/54/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2组Array diff 对比</title>
		<link>http://iamkane.com/index.php/archives/53</link>
		<comments>http://iamkane.com/index.php/archives/53#comments</comments>
		<pubDate>Wed, 02 Dec 2009 09:12:28 +0000</pubDate>
		<dc:creator>Kane</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://iamkane.com/?p=53</guid>
		<description><![CDATA[2组array 进行对比，取其差异部分。 &#160; /** * @array_diff(new,old) */ function array_diff(){var arr1=arguments[0],retArr={};var k1='',i=1,k='',arr={};arr1keys:for(k1 in arr1){for(i=1;i&#38;lt;arguments.length;i++){arr=arguments[i];for(k in arr){if(arr[k]===arr1[k1]){continue arr1keys;}} retArr[k1]=arr1[k1];}} return retArr;}]]></description>
			<content:encoded><![CDATA[<p>2组array 进行对比，取其差异部分。</p>
<p>&nbsp;</p>
<pre class="brush: jscript;">
/**
* @array_diff(new,old)
*/

function array_diff(){var arr1=arguments[0],retArr={};var k1='',i=1,k='',arr={};arr1keys:for(k1 in arr1){for(i=1;i&amp;lt;arguments.length;i++){arr=arguments[i];for(k in arr){if(arr[k]===arr1[k1]){continue arr1keys;}}

retArr[k1]=arr1[k1];}}

return retArr;}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://iamkane.com/index.php/archives/53/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
