为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript设置嵌套对象键

Javascript设置嵌套对象键

德玛西亚99 2022-10-27 15:14:42
代码: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"    }};我想要这样的结果:{    "hello": {        "world": {            "again": "test"        }    }}在 lodash 模块中,我可以做我所说的事情。但在我的代码中,我不能这样做。请帮助我,我该怎么做?
查看完整描述

2 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

我的猜测是你正在寻找

if (typeof object[keyy] != "obect")

而不是

if (typeof object[keyy] == "undefined")

它不会检测到当前是属性值的字符串。

当然调用set(obj, "hello.world.again", "hello again")会导致{"hello": {"world": {"again": "hello again"}}},不会{"hello": {"world": {"again": "test"}}}


查看完整回答
反对 回复 2022-10-27
?
慕村9548890

TA贡献1884条经验 获得超4个赞

我发现您的逻辑需要一个 JSON 对象但接收字符串值,它需要修改一点或设置像这样的值{again: 'hello again'}。


我试着简单地写下这个set 方法,它可能对某人有帮助!


function set(obj, key, value) {

  let keys = key.split('.');

  if(keys.length<2){ obj[key] = value; return obj; }


  let lastKey = keys.pop();


  let fun = `obj.${keys.join('.')} = {${lastKey}: '${value}'};`;

  return new Function(fun)();

}


var obj = {

    "hello": {

        "world": "test"

    }

};


set(obj, "hello.world.again", 'hello again'); // Value should be object here

console.log(obj);


set(obj, "hello.world.again.onece_again", 'hello once again');

console.log(obj);


查看完整回答
反对 回复 2022-10-27
  • 2 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号