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")