我想创建函数以在嵌套对象的任何级别切换字段值
function toggle(object, field) {
object[field] = !object[field];
}
但是如果我想改变这样的嵌套对象:
outer: {
inner: {
enable: true
}
}
我无法像toggle(outer, 'inner.price')
或toggle(outer.inner, 'price')
一样通过它。是否有一些计算属性的技巧,允许我不解析参数字符串并递归地挖掘对象内部?
答案 0 :(得分:1)
在JS中,您实际上可以使用他们的名称访问属性,而${searchTeam?.teamName}
与outer['inner']
相同,但您不需要知道"编译&#的属性名称34;时间。
你应该能够通过分割outer.inner
这样的字符串来找到你想要的递归属性。
outer.inner.enable

答案 1 :(得分:1)
在这方面没有什么比Lodash更好了
function toggle(obj, prop) {
_.set(obj, prop, !_.get(obj, prop));
}
var obj = {
outer: {
inner: {
enable: true
}
}
};
toggle(obj, ["outer", "inner", "enable"]);
console.log(obj);
toggle(obj, ["outer", "inner", "enable"]);
console.log(obj);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
&#13;
说明:
答案 2 :(得分:0)
创建递归函数
var outer = {
inner: {
innerTwo: {
enable: true
}
}
}
function toggle(obj, keyName) {
for (var keys in obj) {
if (obj.hasOwnProperty(keys) && typeof obj[keys] === 'object') {
if (obj[keys][keyName] !== undefined) {
obj[keys][keyName] = !obj[keys][keyName]
} else {
toggle(obj[keys], keyName)
}
}
}
}
toggle(outer, 'enable');
console.log(outer)
&#13;