Javascript设置嵌套对象键

Javascript设置嵌套对象键,javascript,nested,Javascript,Nested,代码: 我将用例子向您解释这个问题。 module.exports.set = function (data, key, value) { if (key.includes(".")) { let elements = key.split("."); let element = elements.pop(); let obj = elements.reduce((object, keyy) => {

代码:

我将用例子向您解释这个问题。

module.exports.set = function (data, key, value) {
    if (key.includes(".")) {
  
      let elements = key.split(".");
      let element = elements.pop();
      let obj = elements.reduce((object, keyy) => {
        if (typeof object[keyy] == "undefined") object[keyy] = {};
  
        return object[keyy];
      }, data);
  
      obj[element] = value;
  
      return data;
    } else {
      data[key] = value;
  
      return data;
    }
}
控制台日志:

var obj = {};

set(obj, "hello.world", "test")

console.log(obj)
但如果我写这段代码:

{
    "hello": {
        "world": "test"
    }
}
对象没有变化。控制台日志如下所示:

var obj = {
    "hello": {
        "world": "test"
    }
};

set(obj, "hello.world.again", "hello again")

console.log(obj)
我想要这样的结果:

var obj = {
    "hello": {
        "world": "test"
    }
};

在lodash模块中,我可以做我说过的事情。但在我的代码中,我不能这样做。请帮助我,我该怎么做?

我发现您的逻辑需要一个JSON对象,但接收字符串值,它需要修改一点或设置如下值{再次:“再次你好”}

我试着简而言之写下这个set方法,它可能会帮助一些人

功能集(对象、键、值){
让keys=key.split('.');

如果(keys.length我猜你在找

{
    "hello": {
        "world": {
            "again": "test"
        }
    }
}
而不是

if (typeof object[keyy] != "obect")
它不会检测当前为属性值的字符串


当然,调用
set(obj,“hello.world.reach”,“hello reach”)
将导致
{“hello”:{“world”:{“reach”:{“hello reach”}}
,而不是
{“hello”:{“world”:{“test”}}

您希望set返回新对象还是相同的对象?是否要覆盖或保留“world”键?是的,我想要这些。代码正在将属性
再次添加到
world
处的现有对象,即字符串
“test”
。由于字符串不能有属性,它会自动失败。请使用调试器逐步执行,并在尝试再次设置
之前和之后查看
obj
。这是否回答了您的问题?
if (typeof object[keyy] == "undefined")