Javascript 动态修改字符串中的json属性
我有一个JSON对象Javascript 动态修改字符串中的json属性,javascript,json,mapreduce,object-properties,Javascript,Json,Mapreduce,Object Properties,我有一个JSON对象 var a = { a: { b: 10, c: 10 } } change(a, 'a.b', 30) 我想要一个可以动态更改JSON对象的方法。假设当我向方法提供对象、字符串和值时,它应该返回更新的JSON对象 var a = { a: { b: 10, c: 10 } } change(a, 'a.b', 30) 更改方法如下:- function change(obj, str, val) { const newObject = str.spli
var a = { a: { b: 10, c: 10 } }
change(a, 'a.b', 30)
我想要一个可以动态更改JSON对象的方法。假设当我向方法提供对象、字符串和值时,它应该返回更新的JSON对象
var a = { a: { b: 10, c: 10 } }
change(a, 'a.b', 30)
更改方法如下:-
function change(obj, str, val) {
const newObject = str.split('.').reverse()
.reduce((a,p,i) => {
if(i===0) a[p] = val
else { let b = {}; b[p] = a; a = b}
return a;
},{})
return { ...obj, ...newObject }
}
它应该会回来
{ a: { b : 30, c: 10 } }
不修改其他json字段,但当前正在返回
{ a: { b : 30 } }
您的return语句将用{b:30}覆盖键{b:10,c:10}的值,您可以使用lodash库的``set``函数,该函数执行与您尝试实现的相同的操作 您可以使用以下代码更改该值
var a={a:{b:10,c:10}
函数getObj(obj,键){
返回obj[键];
}
功能更改(对象、键、值){
让newObj=JSON.parse(JSON.stringify(obj));
设str=keys.split('.');
str.reduce((会计科目、当前、索引)=>{
如果(索引===str.length-1){
acc[当前]=值;
返回acc
}否则{
返回getObj(acc,curr);
}
},newObj);
返回newObj;
}
控制台日志(更改(a'a.b',30))
log(更改(a,'a.c',20))
这是一种方法:
vara={a:{b:10,c:10};
var b={a:{b:{c:10}};
功能更改(obj、str、val){
//获取字符串的部分作为数组
const prop=str.split('.');
//深度克隆对象(这样您就不会修改原始的“a”对象,而是返回一个新对象)
const newObj={…obj};
//保存对新对象的引用
设target=newObj;
道具forEach((el,i)=>{
如果(i 控制台日志(更改(b,'a.b.c',50))代码>字符串可以在将来更改为'a.b.c',因此我希望动态计算它。谢谢你的回答。我更改了代码,使其可以使用任意长度的字符串。我知道这个lodash方法,但我想实现我自己的方法,看看它如何工作