Javascript 如何在对象中设置值

Javascript 如何在对象中设置值,javascript,object,data-structures,ecmascript-5,Javascript,Object,Data Structures,Ecmascript 5,我必须在对象中设置值 这就是问题所在:当我试图在有一些道具的对象中编写道具时,以前的道具将被删除 我解决了两个案子,还有最后一个。 我需要保存test2。 我怎样才能修好它 谢谢 var obj={ 钥匙一:“福”, 关键二:{ 测试1:“baz”, 测试2:{ test21:[“bar”], } } } 函数setObjectProperty(对象、字符串、值){ var path=string.split('.'); var currentObj=obj; 对于(变量i=0;i

我必须在对象中设置值

这就是问题所在:当我试图在有一些道具的对象中编写道具时,以前的道具将被删除

我解决了两个案子,还有最后一个。 我需要保存test2。 我怎样才能修好它

谢谢

var obj={
钥匙一:“福”,
关键二:{
测试1:“baz”,
测试2:{
test21:[“bar”],
}
}
}
函数setObjectProperty(对象、字符串、值){
var path=string.split('.');
var currentObj=obj;
对于(变量i=0;i控制台日志(obj)测试
currentObj[path[i]!=“string”
看起来很奇怪,我想你应该用
typeof
来代替

在循环内部,您应该在每一步都前进,但只有在对象不存在时才创建对象

工作代码:

function setObjectProperty(obj, string, value) {
  var path = string.split('.');
  var currentObj = obj;
  for (var i = 0; i < path.length - 1; i++) {
    if (!currentObj[path[i]] || typeof currentObj[path[i]] == "string") {
      currentObj[path[i]] = {};
    }
    currentObj = currentObj[path[i]];
  }
  currentObj[path[path.length - 1]] = value;
};
函数setObjectProperty(对象、字符串、值){
var path=string.split('.');
var currentObj=obj;
对于(变量i=0;i
所做的更正很少

  • 无论创建子对象如何,都需要推进对象路径
  • 要检查字符串类型,需要使用
    typeof
var obj={
钥匙一:“福”,
关键二:{
测试1:“baz”,
测试2:{
test21:[“bar”],
}
}
}
函数setObjectProperty(对象、字符串、值){
var path=string.split('.');
var currentObj=obj;
对于(变量i=0;i控制台日志(obj)这就是你要找的吗

const存储={
钥匙一:“福”,
关键二:{
测试1:“baz”,
测试2:{
test21:[“bar”],
}
}
}
函数getKeys(key){
返回键.split(“.”).filter(k=>k.length);
}
函数assignProps(对象、键、值=null、根=null){
根=根| |对象;
const key=keys.shift();
如果(!key)返回根目录;
对象[key]=keys.length==0?值:{};
assignProps(对象[键]、键、值、根);
}
转让道具(商店,获取钥匙(“keyOne.foo.bar”),“baz”);
assignProps(store,getKeys(“keytow2.test1.test2”),“value”);
控制台日志(存储)