使用$.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)
$.extend(true, ...)
会使用value
和index
将对象视为对象,因此就像'min'
一样,0
的键将被替换。
你需要写一些处理这种情况的东西。 $.extend()
函数相对复杂,但是一个好的起点:
答案 1 :(得分: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);