2017-09-04 6 views
1

$.extend(true, {}, obj1, obj2)を使用すると、数値結果の数値データはobj2まで消去されます。 $.extend()

サンプルの呼び出しは、次のように次のようになります。

その後のインスタンスに、このサンプルデータを取る:

var base_json_obj = { 
    'regions': [ 
    'NC', 
    '-Greensboro', 
    'VA', 
    '-Richmond' 
    ], 
    'vehicles': [ 
    'Ford:Escape', 
    'Nissan:Altima' 
    ], 
    'turnover': { 
    'min': '0d', 
    'max': '5d' 
    } 
}; 

var new_json_obj = { 
    'regions': [ 
    'FL', 
    '-Miami' 
    ], 
    'vehicles': [ 
    'Hyundai:Sonata' 
    ], 
    'turnover': { 
    'min': '1d', 
    'max': '6d' 
    } 
}; 


var resulting_object = $.extend(true, {}, base_json_obj, new_json_obj); 

結果のオブジェクトが

{ 
    'regions': [ 
    'FL', 
    '-Miami', 
    'VA', 
    '-Richmond' 
    ], 
    'vehicles': [ 
    'Hyundai:Sonata', 
    'Nissan:Altima' 
    ] 
    'turnover': { 
    'min': '1d', 
    'max': '6d' 
    }, 
} 

そして、ここで予想される出力です。 regionsには6つの値があり、vehiclesにはすべて3つの値があることに注意してください。

{ 
    'regions': [ 
    'NC', 
    '-Greensboro', 
    'VA', 
    '-Richmond', 
    'FL', 
    '-Miami' 
    ], 
    'vehicles': [ 
    'Ford:Escape', 
    'Nissan:Altima', 
    'Hyundai:Sonata' 
    ] 
    'turnover': { 
    'min': '1d', 
    'max': '6d' 
    }, 
} 

$.extend()への呼び出しを変更したり、これを達成するために、いくつかの方法で$.merge()を使用する方法はありますか?

+0

を同じ特性(地域、乗り物、売上高)、または1つの追加のプロパティがあるオブジェクトですか? – DavidDomain

答えて

1

$.extend(true, ...)valueindexを使用して、オブジェクトのような配列を扱いますので、ちょうど'min'のように、0のキーが置き換えられます。

このケースを処理するものを書く必要があります。 $.extend()機能は比較的複雑ですが、開始するには良い場所:

0

あなたがループを使用することができます両方のオブジェクトを持っています

var base_json_obj = { 
 
    'regions': [ 
 
    'NC', 
 
    '-Greensboro', 
 
    'VA', 
 
    '-Richmond' 
 
    ], 
 
    'vehicles': [ 
 
    'Ford:Escape', 
 
    'Nissan:Altima' 
 
    ], 
 
    'turnover': { 
 
    'min': '0d', 
 
    'max': '5d' 
 
    } 
 
}; 
 

 
var new_json_obj = { 
 
    'regions': [ 
 
    'FL', 
 
    '-Miami' 
 
    ], 
 
    'vehicles': [ 
 
    'Hyundai:Sonata' 
 
    ], 
 
    'turnover': { 
 
    'min': '1d', 
 
    'max': '6d' 
 
    } 
 
}; 
 

 

 
var resulting_object={}; 
 
for (key in base_json_obj) { 
 
    // the values from base and new json objects respectively 
 
    var val1 = base_json_obj[key], val2 = new_json_obj[key]; 
 
    resulting_object[key] = Array.isArray(val1)? // if array 
 
    val1.concat(val2): // concatenate them, else (objects) 
 
    Object.assign({}, val1, val2); // assign the second object to the first one 
 
} 
 
console.log(resulting_object);

+0

'turnover'がそれにハードコードされておらず、任意の数値/テキストインデックスオブジェクトに展開できるといいでしょう。 – SISYN

+0

配列が 'concat()'ならば全ての値をチェックし、そうでなければ 'Object.assign()'をチェックします。 –

関連する問題