Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何动态删除嵌套的json密钥?_Javascript_Angularjs_Json - Fatal编程技术网

Javascript 如何动态删除嵌套的json密钥?

Javascript 如何动态删除嵌套的json密钥?,javascript,angularjs,json,Javascript,Angularjs,Json,这是示例json: { "search": { "facets": { "author": [ ], "language": [ { "value": "nep", "count": 3 }, { "value": "urd", "count": 1 } ], "source": [ { "value": "West Bengal State Council of Vocat

这是示例json:

{
"search": {
"facets": {
  "author": [

  ],
  "language": [
    {
      "value": "nep",
      "count": 3
    },
    {
      "value": "urd",
      "count": 1
    }
  ],
  "source": [
    {
      "value": "West Bengal State Council of Vocational Education & Training",
      "count": 175
    }
  ],
  "type": [
    {
      "value": "text",
      "count": 175
    }
  ],
  }
 }
有几种方法可以删除key
search.facets.source

  • delete search.facets.source
  • 删除jsobObj['search']['facets']['source']
  • var jsonKey='source';
    parse(angular.toJson(jsonObj),函数(键,值){
    if(key!=jsonKey)
    返回值;
    });

  • 以上1和2不是动态的,3是一种方式,但不是一种正确的方式。因为若源存在于另一个节点中,那个么它将无法工作。请任何人都可以告诉我如何在任何类型的嵌套键中动态删除它。因为我们无法在上面2中动态生成数组序列。

    假设您从以下方面开始:

    let path = 'search.facets.source';
    
    然后,逻辑很简单:找到
    search.facets
    对象,然后
    delete obj['source']

    第一步,将
    路径
    分为初始路径和尾随属性名称:

    let keys = path.split('.');
    let prop = keys.pop();
    
    在对象中查找
    facets
    对象:

    let parent = keys.reduce((obj, key) => obj[key], jsonObj);
    
    删除属性:

    delete parent[prop];
    

    我找到了另一个解决办法,很简单

    var jsonKey = 'search.facets.source';
    eval('delete jsonObj.' + jsonKey + ';');
    

    “动态”到底是什么意思?动态基于什么?您希望将什么输入转化为删除操作?动态意味着,我想要一个函数,该函数将在删除密钥后返回json,无论我将密钥和jsonObj传递给该函数,您能否提供一个完整的函数。请不要使用
    eval
    。曾经正确地做这件事并没有那么复杂。