访问嵌套对象的字段

时间:2018-03-08 16:05:59

标签: javascript

我想创建函数以在嵌套对象的任何级别切换字段值

 
function toggle(object, field) {
  object[field] = !object[field];
}

但是如果我想改变这样的嵌套对象:

outer: {
  inner: {
    enable: true
  }
}

我无法像toggle(outer, 'inner.price')toggle(outer.inner, 'price')一样通过它。是否有一些计算属性的技巧,允许我不解析参数字符串并递归地挖掘对象内部?

3 个答案:

答案 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;
&#13;
&#13;

  

说明:

  1. Lodash是JavaScript工具库中必备的工具集
  2. _。get()从对象深处获取属性,如下所示:_. get(obj,[&#34; outer&#34;,&#34; inner&#34;,&#34; enable&# 34;])
  3. _。set()在对象
  4. 中设置深度属性

    查看相应的文件:GET&amp; SET

答案 2 :(得分:0)

创建递归函数

&#13;
&#13;
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;
&#13;
&#13;