Javascript 如何在递归解析JSON对象后正确显示其结果?

Javascript 如何在递归解析JSON对象后正确显示其结果?,javascript,json,Javascript,Json,我有一些基于给定的键数组递归删除JSON对象中属性的代码。它能够找到删除所有相关的关键点,但我不知道如何显示最终结果将删除所有关键点 我在for循环之后添加了以下内容: if (index == -1) { console.log(obj) } 这个想法是,一旦它到达顶部并完成for循环,它应该显示新对象。问题是,它在显示属性时缺少很多根键 function deleteJSONProperties (obj, keys){ var index; for (var pr

我有一些基于给定的键数组递归删除JSON对象中属性的代码。它能够找到删除所有相关的关键点,但我不知道如何显示最终结果将删除所有关键点

我在for循环之后添加了以下内容:

if (index == -1) {
    console.log(obj)
}
这个想法是,一旦它到达顶部并完成for循环,它应该显示新对象。问题是,它在显示属性时缺少很多根键

function deleteJSONProperties (obj, keys){
    var index;
    for (var prop in obj) {
        if(obj.hasOwnProperty(prop)){
            switch(typeof(obj[prop])){
                case 'string':
                    index = keys.indexOf(prop);
                    if(index > -1){
                        delete obj[prop];
                    }
                break;
                case 'object':
                    index = keys.indexOf(prop);
                    if(index > -1){
                        delete obj[prop];
                    }else{
                        deleteJSONProperties (obj[prop], keys);
                    }
                break;
                case 'boolean':
                    index = keys.indexOf(prop);
                    if(index > -1){
                        delete obj[prop];
                    }
                break;
                case 'number':
                    index = keys.indexOf(prop);
                    if(index > -1){
                        delete obj[prop];
                    }
                break;
            }
        }
    }
}
以下是一些测试数据:

var jsonObj2 = [
    {
      "_id": "5d14e86629cba445323ab05a",
      "age": 20,
      "tags": [
        "minim",
        "occaecat",
        "veniam",
        "consectetur"
      ],
      "friends": [
        {
          "inheritedValue": 0,
          "ExpectedValue": "Alfreda Boone"
        },
        {
          "inheritedValue": 1,
          "ExpectedValue": "Mcgee Oneill"
        },
        {
          "inheritedValue": 2,
          "ExpectedValue": "Kaye Dejesus"
        }
      ],
      "greeting": "Hello, undefined! You have 6 unread messages.",
      "favoriteFruit": "banana"
    },
    {
      "_id": "5d14e866b05cc8b27c2361d9",
      "age": 23,
      "tags": [
        "consequat",
        "officia",
        "consectetur",
        "fugiat"
      ],
      "friends": [
        {
          "inheritedValue": 0,
          "ExpectedValue": "Brooke Smith"
        },
        {
          "inheritedValue": 1,
          "ExpectedValue": "Hodges Nielsen"
        },
        {
          "inheritedValue": 2,
          "ExpectedValue": "Lesa Hall"
        }
      ],
      "greeting": "Hello, undefined! You have 3 unread messages.",
      "favoriteFruit": "apple"
    },
    {
      "_id": "5d14e866db71274862f509be",
      "age": 32,
      "tags": [
        "aute",
        "officia",
        "esse",
        "voluptate"
      ],
      "friends": [
        {
          "inheritedValue": 0,
          "ExpectedValue": "Rivers Anderson"
        },
        {
          "inheritedValue": 1,
          "ExpectedValue": "Ingram Mccall"
        },
        {
          "inheritedValue": 2,
          "ExpectedValue": "Melton Quinn"
        }
      ],
      "greeting": "Hello, undefined! You have 9 unread messages.",
      "favoriteFruit": "banana"
    },
    {
      "_id": "5d14e866ceeadef742940bf0",
      "age": 27,
      "tags": [
        "mollit",
        "laboris",
        "consequat",
        "nisi"
      ],
      "friends": [
        {
          "inheritedValue": 0,
          "ExpectedValue": "Delia Woodward"
        },
        {
          "inheritedValue": 1,
          "ExpectedValue": "Kristin Riley"
        },
        {
          "inheritedValue": 2,
          "ExpectedValue": "Floyd Lowe"
        }
      ],
      "greeting": "Hello, undefined! You have 4 unread messages.",
      "favoriteFruit": "apple"
    },
    {
      "_id": "5d14e866de69ec724cea8da4",
      "age": 30,
      "tags": [
        "velit",
        "fugiat",
        "aute",
        "deserunt"
      ],
      "friends": [
        {
          "inheritedValue": 0,
          "ExpectedValue": "Osborn Hubbard"
        },
        {
          "inheritedValue": 1,
          "ExpectedValue": "Dianna Daugherty"
        },
        {
          "inheritedValue": 2,
          "ExpectedValue": "Sims Guy"
        }
      ],
      "greeting": "Hello, undefined! You have 10 unread messages.",
      "favoriteFruit": "apple"
    },
    {
      "_id": "5d14e86643a18516e353146a",
      "age": 34,
      "tags": [
        "id",
        "veniam",
        "voluptate",
        "esse"
      ],
      "friends": [
        {
          "inheritedValue": 0,
          "ExpectedValue": "Solis Nolan"
        },
        {
          "inheritedValue": 1,
          "ExpectedValue": "Maricela Colon"
        },
        {
          "inheritedValue": 2,
          "ExpectedValue": "Gilda Ortiz"
        }
      ],
      "greeting": "Hello, undefined! You have 6 unread messages.",
      "favoriteFruit": "apple"
    },
    {
      "_id": "5d14e8662452730e42d257d4",
      "age": 23,
      "tags": [
        "velit",
        "cupidatat",
        "duis",
        "dolore"
      ],
      "friends": [
        {
          "inheritedValue": 0,
          "ExpectedValue": "Cole Roman"
        },
        {
          "inheritedValue": 1,
          "ExpectedValue": "Kimberley Carney"
        },
        {
          "inheritedValue": 2,
          "ExpectedValue": "Lowery Mcdonald"
        }
      ],
      "greeting": "Hello, undefined! You have 9 unread messages.",
      "favoriteFruit": "strawberry"
    }
  ];

var keys = ['inheritedValue', 'effectiveValue','ExpectedValue'];
deleteJSONProperties(jsonObj2, keys);
预期的输出应该是移除键的原始JSON对象。在我的解决方案中,我丢失了一些信息,例如,没有显示

"tags": [
        "minim",
        "occaecat",
        "veniam",
        "consectetur"
      ]
我会:

["minim",
 "occaecat",
 "veniam",
 "consectetur"
]
有条件的实际结果

[ 'minim', 'occaecat', 'veniam', 'consectetur' ]
[ {}, {}, {} ]
{ _id: '5d14e86629cba445323ab05a',
  age: 20,
  tags: [ 'minim', 'occaecat', 'veniam', 'consectetur' ],
  friends: [ {}, {}, {} ],
  greeting: 'Hello, undefined! You have 6 unread messages.',
  favoriteFruit: 'banana' }
[ 'consequat', 'officia', 'consectetur', 'fugiat' ]
[ {}, {}, {} ]
{ _id: '5d14e866b05cc8b27c2361d9',
  age: 23,
  tags: [ 'consequat', 'officia', 'consectetur', 'fugiat' ],
  friends: [ {}, {}, {} ],
  greeting: 'Hello, undefined! You have 3 unread messages.',
  favoriteFruit: 'apple' }
[ 'aute', 'officia', 'esse', 'voluptate' ]
[ {}, {}, {} ]
{ _id: '5d14e866db71274862f509be',
  age: 32,
  tags: [ 'aute', 'officia', 'esse', 'voluptate' ],
  friends: [ {}, {}, {} ],
  greeting: 'Hello, undefined! You have 9 unread messages.',
  favoriteFruit: 'banana' }
[ 'mollit', 'laboris', 'consequat', 'nisi' ]
[ {}, {}, {} ]
{ _id: '5d14e866ceeadef742940bf0',
  age: 27,
  tags: [ 'mollit', 'laboris', 'consequat', 'nisi' ],
  friends: [ {}, {}, {} ],
  greeting: 'Hello, undefined! You have 4 unread messages.',
  favoriteFruit: 'apple' }
[ 'velit', 'fugiat', 'aute', 'deserunt' ]
[ {}, {}, {} ]
{ _id: '5d14e866de69ec724cea8da4',
  age: 30,
  tags: [ 'velit', 'fugiat', 'aute', 'deserunt' ],
  friends: [ {}, {}, {} ],
  greeting: 'Hello, undefined! You have 10 unread messages.',
  favoriteFruit: 'apple' }
[ 'id', 'veniam', 'voluptate', 'esse' ]
[ {}, {}, {} ]
{ _id: '5d14e86643a18516e353146a',
  age: 34,
  tags: [ 'id', 'veniam', 'voluptate', 'esse' ],
  friends: [ {}, {}, {} ],
  greeting: 'Hello, undefined! You have 6 unread messages.',
  favoriteFruit: 'apple' }
[ 'velit', 'cupidatat', 'duis', 'dolore' ]
[ {}, {}, {} ]
{ _id: '5d14e8662452730e42d257d4',
  age: 23,
  tags: [ 'velit', 'cupidatat', 'duis', 'dolore' ],
  friends: [ {}, {}, {} ],
  greeting: 'Hello, undefined! You have 9 unread messages.',
  favoriteFruit: 'strawberry' }
[ { _id: '5d14e86629cba445323ab05a',
    age: 20,
    tags: [ 'minim', 'occaecat', 'veniam', 'consectetur' ],
    friends: [ {}, {}, {} ],
    greeting: 'Hello, undefined! You have 6 unread messages.',
    favoriteFruit: 'banana' },
  { _id: '5d14e866b05cc8b27c2361d9',
    age: 23,
    tags: [ 'consequat', 'officia', 'consectetur', 'fugiat' ],
    friends: [ {}, {}, {} ],
    greeting: 'Hello, undefined! You have 3 unread messages.',
    favoriteFruit: 'apple' },
  { _id: '5d14e866db71274862f509be',
    age: 32,
    tags: [ 'aute', 'officia', 'esse', 'voluptate' ],
    friends: [ {}, {}, {} ],
    greeting: 'Hello, undefined! You have 9 unread messages.',
    favoriteFruit: 'banana' },
  { _id: '5d14e866ceeadef742940bf0',
    age: 27,
    tags: [ 'mollit', 'laboris', 'consequat', 'nisi' ],
    friends: [ {}, {}, {} ],
    greeting: 'Hello, undefined! You have 4 unread messages.',
    favoriteFruit: 'apple' },
  { _id: '5d14e866de69ec724cea8da4',
    age: 30,
    tags: [ 'velit', 'fugiat', 'aute', 'deserunt' ],
    friends: [ {}, {}, {} ],
    greeting: 'Hello, undefined! You have 10 unread messages.',
    favoriteFruit: 'apple' },
  { _id: '5d14e86643a18516e353146a',
    age: 34,
    tags: [ 'id', 'veniam', 'voluptate', 'esse' ],
    friends: [ {}, {}, {} ],
    greeting: 'Hello, undefined! You have 6 unread messages.',
    favoriteFruit: 'apple' },
  { _id: '5d14e8662452730e42d257d4',
    age: 23,
    tags: [ 'velit', 'cupidatat', 'duis', 'dolore' ],
    friends: [ {}, {}, {} ],
    greeting: 'Hello, undefined! You have 9 unread messages.',
    favoriteFruit: 'strawberry' } ]
for循环结束时没有条件的实际结果

[ 'minim', 'occaecat', 'veniam', 'consectetur' ]
{}
{}
{}
[ {}, {}, {} ]
{ _id: '5d14e86629cba445323ab05a',
  age: 20,
  tags: [ 'minim', 'occaecat', 'veniam', 'consectetur' ],
  friends: [ {}, {}, {} ],
  greeting: 'Hello, undefined! You have 6 unread messages.',
  favoriteFruit: 'banana' }
[ 'consequat', 'officia', 'consectetur', 'fugiat' ]
{}
{}
{}
[ {}, {}, {} ]
{ _id: '5d14e866b05cc8b27c2361d9',
  age: 23,
  tags: [ 'consequat', 'officia', 'consectetur', 'fugiat' ],
  friends: [ {}, {}, {} ],
  greeting: 'Hello, undefined! You have 3 unread messages.',
  favoriteFruit: 'apple' }
[ 'aute', 'officia', 'esse', 'voluptate' ]
{}
{}
{}
[ {}, {}, {} ]
{ _id: '5d14e866db71274862f509be',
  age: 32,
  tags: [ 'aute', 'officia', 'esse', 'voluptate' ],
  friends: [ {}, {}, {} ],
  greeting: 'Hello, undefined! You have 9 unread messages.',
  favoriteFruit: 'banana' }
[ 'mollit', 'laboris', 'consequat', 'nisi' ]
{}
{}
{}
[ {}, {}, {} ]
{ _id: '5d14e866ceeadef742940bf0',
  age: 27,
  tags: [ 'mollit', 'laboris', 'consequat', 'nisi' ],
  friends: [ {}, {}, {} ],
  greeting: 'Hello, undefined! You have 4 unread messages.',
  favoriteFruit: 'apple' }
[ 'velit', 'fugiat', 'aute', 'deserunt' ]
{}
{}
{}
[ {}, {}, {} ]
{ _id: '5d14e866de69ec724cea8da4',
  age: 30,
  tags: [ 'velit', 'fugiat', 'aute', 'deserunt' ],
  friends: [ {}, {}, {} ],
  greeting: 'Hello, undefined! You have 10 unread messages.',
  favoriteFruit: 'apple' }
[ 'id', 'veniam', 'voluptate', 'esse' ]
{}
{}
{}
[ {}, {}, {} ]
{ _id: '5d14e86643a18516e353146a',
  age: 34,
  tags: [ 'id', 'veniam', 'voluptate', 'esse' ],
  friends: [ {}, {}, {} ],
  greeting: 'Hello, undefined! You have 6 unread messages.',
  favoriteFruit: 'apple' }
[ 'velit', 'cupidatat', 'duis', 'dolore' ]
{}
{}
{}
[ {}, {}, {} ]
{ _id: '5d14e8662452730e42d257d4',
  age: 23,
  tags: [ 'velit', 'cupidatat', 'duis', 'dolore' ],
  friends: [ {}, {}, {} ],
  greeting: 'Hello, undefined! You have 9 unread messages.',
  favoriteFruit: 'strawberry' }
[ { _id: '5d14e86629cba445323ab05a',
    age: 20,
    tags: [ 'minim', 'occaecat', 'veniam', 'consectetur' ],
    friends: [ {}, {}, {} ],
    greeting: 'Hello, undefined! You have 6 unread messages.',
    favoriteFruit: 'banana' },
  { _id: '5d14e866b05cc8b27c2361d9',
    age: 23,
    tags: [ 'consequat', 'officia', 'consectetur', 'fugiat' ],
    friends: [ {}, {}, {} ],
    greeting: 'Hello, undefined! You have 3 unread messages.',
    favoriteFruit: 'apple' },
  { _id: '5d14e866db71274862f509be',
    age: 32,
    tags: [ 'aute', 'officia', 'esse', 'voluptate' ],
    friends: [ {}, {}, {} ],
    greeting: 'Hello, undefined! You have 9 unread messages.',
    favoriteFruit: 'banana' },
  { _id: '5d14e866ceeadef742940bf0',
    age: 27,
    tags: [ 'mollit', 'laboris', 'consequat', 'nisi' ],
    friends: [ {}, {}, {} ],
    greeting: 'Hello, undefined! You have 4 unread messages.',
    favoriteFruit: 'apple' },
  { _id: '5d14e866de69ec724cea8da4',
    age: 30,
    tags: [ 'velit', 'fugiat', 'aute', 'deserunt' ],
    friends: [ {}, {}, {} ],
    greeting: 'Hello, undefined! You have 10 unread messages.',
    favoriteFruit: 'apple' },
  { _id: '5d14e86643a18516e353146a',
    age: 34,
    tags: [ 'id', 'veniam', 'voluptate', 'esse' ],
    friends: [ {}, {}, {} ],
    greeting: 'Hello, undefined! You have 6 unread messages.',
    favoriteFruit: 'apple' },
  { _id: '5d14e8662452730e42d257d4',
    age: 23,
    tags: [ 'velit', 'cupidatat', 'duis', 'dolore' ],
    friends: [ {}, {}, {} ],
    greeting: 'Hello, undefined! You have 9 unread messages.',
    favoriteFruit: 'strawberry' } ]

您没有删除空对象,因此它们仍然是空的,现在可以吗

“严格使用”;
函数deleteJSONProperties(对象、键){
var指数;
var itemsNo=0;
用于(obj中的var prop){
itemsNo++;
if(对象拥有自己的财产(财产)){
开关(类型(obj[prop])){
大小写“string”:
索引=键。索引of(prop);
如果(索引>-1){
项目无--;
删除obj[prop];
}
打破
案例“对象”:
索引=键。索引of(prop);
如果(索引>-1){
项目无--;
删除obj[prop];
}否则{
如果(!deleteJSONProperties(对象[prop],键)){
项目无--;
删除obj[prop];
}
}
打破
“布尔”大小写:
索引=键。索引of(prop);
如果(索引>-1){
项目无--;
删除obj[prop];
}
打破
案件编号:
索引=键。索引of(prop);
如果(索引>-1){
项目无--;
删除obj[prop];
}
打破
}
}其他项目无--;
}
如果(!itemsNo)删除对象[prop];
退货项目否;
}
var jsonObj2=[
{
“_id”:“5d14e86629cba445323ab05a”,
“年龄”:20岁,
“标签”:[
“最小值”,
“奥卡卡特”,
“威尼斯”,
“奉献者”
],
“朋友”:[
{
“inheritedValue”:0,
“期望值”:“Alfreda Boone”
},
{
“继承值”:1,
“ExpectedValue”:“Mcgee Oneill”
},
{
“继承值”:2,
“期望值”:“Kaye Dejesus”
}
],
“问候语”:“您好,未定义!您有6条未读邮件。”,
“最喜欢的水果”:“香蕉”
},
{
“_id”:“5d14e866b05cc8b27c2361d9”,
“年龄”:23岁,
“标签”:[
“consequeat”,
“官方”,
“奉献者”,
“福吉亚”
],
“朋友”:[
{
“inheritedValue”:0,
“ExpectedValue”:“Brooke Smith”
},
{
“继承值”:1,
“期望值”:“Hodges Nielsen”
},
{
“继承值”:2,
“期望值”:“Lesa Hall”
}
],
“问候语”:“您好,未定义!您有3封未读邮件。”,
“最喜欢的水果”:“苹果”
},
{
“_id”:“5d14e866db71274862f509be”,
“年龄”:32岁,
“标签”:[
“奥特”,
“官方”,
“埃塞”,
“呕吐”
],
“朋友”:[
{
“inheritedValue”:0,
“期望值”:“Rivers Anderson”
},
{
“继承值”:1,
“ExpectedValue”:“Ingram Mccall”
},
{
“继承值”:2,
“期望值”:“梅尔顿·奎因”
}
],
“问候语”:“您好,未定义!您有9条未读邮件。”,
“最喜欢的水果”:“香蕉”
},
{
“_id”:“5d14e866ceeadef742940bf0”,
“年龄”:27岁,
“标签”:[
“莫利特”,
“laboris”,
“consequeat”,
“尼西”
],
“朋友”:[
{
“inheritedValue”:0,
“期望值”:“Delia Woodward”
},
{
“继承值”:1,
“ExpectedValue”:“Kristin Riley”
},
{
“继承值”:2,
“期望值”:“Floyd Lowe”
}
],
“问候语”:“您好,未定义!您有4封未读邮件。”,
“最喜欢的水果”:“苹果”
},
{
“_id”:“5d14e866de69ec724cea8da4”,
“年龄”:30岁,
“标签”:[
“velit”,
“福吉雅特”,
“奥特”,
“卸载”
],
“朋友”:[
{
“inheritedValue”:0,
“ExpectedValue”:“奥斯本·哈伯德”
},
{
“继承值”:1,
“期望值”:“Dianna Daugherty”
},
{
“继承值”:2,
“ExpectedValue”:“Sims Guy”
}
],
“问候语”:“您好,未定义!您有10条未读邮件。”,
“最喜欢的水果”:“苹果”
},
{
“_id”:“5d14e86643a18516e353146a”,
“年龄”:34岁,
“标签”:[
“身份证”,
“威尼斯”,
“呕吐”,
“埃塞”
],
“朋友”:[
{
“inheritedValue”:0,
“ExpectedValue”:“索利斯诺兰”
},
{
“继承值”:1,
“ExpectedValue”:“Maricela Colon”
},
{
“继承值”:2,
“期望值”:“Gilda Ortiz”
}
],
“问候语”:“您好,未定义!您有6条未读邮件。”,
“最喜欢的水果”:“苹果”
},
{
“_id”:“5d14e8662452730e42d257d4”,
“年龄”:23岁,
“标签”:[
“velit”,
“丘比特”,
“酒后驾车”,
“多洛尔”
],
“朋友”:[
{
“inheritedValue”:0,
“ExpectedValue”:“Cole Roman”
},
{
“继承值”:1,
“期望值”:“金伯利卡尼”
},
{
“继承值”:2,
“前