2

objectこんにちは私は別の値のフォームを変更しようとしていましたobject

これは私が変更する必要があるものです:

  y = {name:'m' , age:'28' , g:{m:'n' , f:'y' , k:'n' ,
       other :{x:'f' , y:'m'}} , h:'6' , zip :'12345' } ;

次のオブジェクトがループインしobject y、一致する要素が見つかった場合は、オブジェクトに一致するように値を変更しますx

   ​x = {name :'y' , age:'17' , g :{m:'y' ,f:'n'}} ;

コード

  for(var i in x){
     for(var o in y){
        if(i == o) y[o] = x[i] ; 
            }
      }

このコードを実行すると、値が変更され、値がy.(name and age )そのまま保持h and zipされます。これはすばらしいことです。

問題gオブジェクトにあり、の値を変更し、残りの部分を削除するだけg.nですg.fg object element

jsFiddleの

私が手に入れたいと思っていたのは

  y = {name:'y' , age:'17' , g:{m:'y' , f:'n' , k:'n' ,
   other :{x:'f' , y:'m'}} , h:'6' , zip :'12345' } 

私はjqueryを使用しているので、それを支援するjquery関数があれば問題ありません

4

3 に答える 3

3

jQuery.extendパラメータで使用できdeepます:

2 つ以上のオブジェクトの内容を最初のオブジェクトにマージします。

[...]

$.extend() によって実行されるマージは、デフォルトでは再帰的ではありません。最初のオブジェクトのプロパティ自体がオブジェクトまたは配列である場合、2 番目のオブジェクトの同じキーを持つプロパティによって完全に上書きされます。値はマージされません。[...] ただし、関数の最初の引数に true を渡すことで、オブジェクトは再帰的にマージされます。(最初の引数に false を渡すことはサポートされていません。)

var y = {
    name: 'm',
    age: '28',
    g: {
        m: 'n',
        f: 'y',
        k: 'n',
        other: {
            x: 'f',
            y: 'm'
        }
    },
    h: '6',
    zip: '12345'
};
var x = {
    name: 'y',
    age: '17',
    g: {
        m: 'y',
        f: 'n'
    }
};
$.extend(true, y, x);
console.log(y);
// {
//     "name": "y",
//     "age": "17",
//     "g": {
//         "m": "y",
//         "f": "n",
//         "k": "n",
//         "other": {
//             "x": "f",
//             "y": "m"
//         }
//     },
//     "h": "6",
//     "zip": "12345"
// }
于 2012-07-02T12:29:11.277 に答える
2

xとのプロパティをループして比較しているため、結果は期待どおりですy。値が等しくない場合は、 のプロパティの値を のプロパティの値に置き換えyます。x

この場合y.g == x.gは false です。異なるオブジェクトがあるため、yg は xg に置き換えられます

これを試して :

function compare(x, y) {

    for (var i in x) {
        for (var o in y) {
            if(typeof i == "object")
            {
                compare(i,o);
            }else{
                if (i == o) y[o] = x[i];
            }
        }
    }
}

compare(x,y);

http://jsfiddle.net/9qkQ8/3/

于 2012-07-02T12:36:34.237 に答える
0

| | 私はjqueryを使用しているので、役立つjquery関数があればそれで問題ありません

jQuery.extendを見てください。

$.extend(true, y, x);
于 2012-07-02T12:31:56.617 に答える