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

时间:2016-08-11 07:43:05

标签: javascript angularjs json

这是示例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
    }
  ],
  }
 }

有几种方法可以删除密钥search.facets.source

  1. delete search.facets.source
  2. delete jsobObj['search']['facets']['source']
  3. var jsonKey = 'source'; JSON.parse(angular.toJson(jsonObj), function (key, value) { if (key != jsonKey) return value; });
  4. 1以上& 2不是动态的,3是方式之一,但不是正确的方式。因为如果源存在于另一个节点中,那么它将无法工作。请任何人都可以告诉我如何在任何类型的嵌套密钥中动态删除它。因为我们无法在2以上动态生成数组序列。

2 个答案:

答案 0 :(得分:4)

假设你从这开始:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

<div id="di1">Div 1</div>
<div id="di2">Div 2</div>
<div id="di3">Div 3</div>
<div id="di4">Div 4</div>
<hr>
<hr>

<div id="li1">Links 1</div>
<div id="li2">Links 2</div>
<div id="li3">Links 3</div>
<div id="li4">Links 4</div>

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

第一步,将delete obj['source']划分为初始路径和尾随属性名称:

path

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

facets

删除属性:

let parent = keys.reduce((obj, key) => obj[key], jsonObj);

答案 1 :(得分:-1)

我找到了另一个解决方案,很容易。

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