有一个对象:
changed: {
filter_models: {
adventure_state: null,
type_id: null,
countries: []
},
additionally_filter: {
price_from: null,
price_to: null,
},
region: {
regions: [],
cities: [],
search_neighborns: null
},
specifications: {
fuels: [],
transmissions: [],
count_doors: {
from: null,
to: null
},
colors: {
items: [],
metallic: null
},
options: []
}
}
以及来自浏览器行的数据,需要遍历所有属性并填写更改对象中的相应字段
例如,如果一个字符串进来,我将它序列化为一个对象params,并且它包含params.filter_models.type_id,那么你需要在第一个中找到相同的并用第二个中的值替换它,还有一件事,如果一个数组来,那么它的所有元素都必须转换为整数并替换,即 changed.options必须只是一个数组,并且它的所有元素都必须是整数。
我提供了一个方法的实现示例,该方法将值从另一个对象的相应字段分配给一个对象的字段。
如果目标对象中不存在该字段,则不会创建该字段。方法不被复制。从嵌套数组中,仅复制简单(非对象)类型的元素。
为什么不将自己限制在标准中
Object.assign()- 因为在复制嵌套对象时,它执行的是复制,而不是合并。也就是说,在这种情况下,copy = Object.assign(changed, params);嵌套对象copy.specifications将仅包含一个数组options,“丢失”其余字段 - 这不是任务所需要的。ps:当然不需要创建对象的副本 - 你可以使用相同的,
changed.assignValuesFrom(...);. 该示例创建了一个单独的对象,如评论中所述由于没有内置语言来做你想做的事,你可以使用lodash merge。