我有一个这样的对象
var obj2= {
'home' : {
'1' : {
'year' : '1999'
},
'2' : {
'year' : '2000'
'month' : '11'
},
},
'company' : {
'1' : {
'year' : '2010'
'month' : '2'
},
}
};
如果这个 key 链已经存在,我想在对象中添加更多的键或替换值,例如:
buss_type = "home",
type_id = "1",
date_type = "month",
value = "9"
var tmp_obj1 = {[buss_type]: {[type_id]: {[date_type]: value}}};
和
buss_type = "company",
type_id = "2",
date_type = "month",
value = "12"
var tmp_obj2 = {[buss_type]: {[type_id]: {[date_type]: value}}};
制作对象:
obj = {
'home' : {
'1' : {
'year' : '1999',
'month' : '9'
},
'2' : {
'year' : '2000',
'month' : '11'
},
},
'company' : {
'1' : {
'year' : '2020',
'month' : '10'
},
'2' : {
'month' : '12'
}
},
};
.push()
或 .concat()
等数组方法仅在末尾添加新键,而不是替换现有键的值。
是否有任何对象方法可以使其易于管理,或者我应该只使用循环并在添加新值或更改现有值之前检查所有键?
谢谢。
最佳答案
您可以为键取一个数组并保存最后一个键以供直接分配。
function setValue(object, path, value) {
var last = path.pop();
path.reduce(function (o, k) {
return o[k] = o[k] || {};
}, object)[last] = value;
}
var object = { home: { 1: { year: '1999' }, 2: { year: '2000', month: '11' } }, company: { 1: { year: '2010', month: '2' } } };
setValue(object, ["home", "1", "month"], "9");
setValue(object, ["company", "2", "month"], "12");
console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 在对象中插入或替换值的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47306579/