私は質問アスカーの解決策は、私は問題を分析しようとしたそのJavascriptを:ディープ比較
var obj = {here: 2};
console.log(deepEqual(obj, obj));
// → true
console.log(deepEqual(obj, {here: 1}));
// → false
console.log(deepEqual(obj, {here: 2}));
// → true
function deepEqual(a,b)
{
if((typeof a == 'object' && a != null) &&
(typeof b == 'object' && b != null))
{
var count = [0,0];
for(var key in a) count[0]++;
for(var key in b) count[1]++;
if(count[0]-count[1] != 0) {console.log('1');return false;}
for(var key in a)
{
if(!(key in b) || !deepEqual(a[key],b[key])) {console.log('2');return false;}
}
for(var key in b)
{
if(!(key in a) || !deepEqual(b[key],a[key])) {console.log('3');return false;}
}
}
console.log('a:'+a+' b:'+b);
return a===b;
}
obj === { here:2 }
を思い付いたこのコードは、最後のテストを(失敗した私を説得していないこの質問にJavascript Deep Comparison をチェックしていましたconsole.log(deepEqual(obj、{here:2}))))しかし、メモリ内のインスタンスが違うにもかかわらず、等しいキーと値を持っていれば、オブジェクトを深く等しくするロジックは、私を納得させるものではありません。私の「解決策」に問題があるのでしょうか、またはミスが運動の前提にありますか?私がリンクした質問に記載されているコードは有効ですか? hikinthruが言及するのを忘れてしまった
資源(http://eloquentjavascript.net/04_data.html#exercise_deep_compare)
それはあなたが求めているものは不明です。あなたは深い平等が意味するべきことにあなたが反対していると言っていますか? –
それは私が求めていることの一部です。私の主張している解決法が間違っているのですか、それとも問題がありますか?最後の行は、ブラウザでは、同じキーとそのそれぞれの値を持つオブジェクトさえ厳密には等しくないことを示しています。質問に問題がある場合はお知らせください。削除します。 – zenwaichi
さて、あなたの関数は、両方のオブジェクトが同じプロパティを持っていることを確かめた後、決して 'return true'を返しません... – Bergi