javascript - 无论对象数组中的深度如何,获取键值

标签 javascript

我有一个对象数组,我想在其中获取键的值,例如'多变的'。但 key 的深度是不同的,如下所示 -

[{
    "test": {
        "nameObj": {
            "name": "DateExpires",
            "title": "DateExpires",
            "variable": "DateTime"
        },
    }
}, 
{
    "test": {
        "nameObjSomethingElse": {
            "name": "DateExpires",
            "title": "DateExpires",
            "variable": "DateTime"
        },
    }
}, 
{
    "test": {
        "nameObjSomethingElse": {
            "name": "DateExpires",
            "title": "DateExpires",
           "anotherLevel": {
            "variable": "DateTime"
           }
        }
    }
}]

在数组中的每个对象中,键“变量”处于不同级别并在不同键下。如何获取“变量”的值?

最佳答案

您可以使用 JSON.stringify 并使用其回调函数来识别特定键的每个值:

const obj = [{
    "test": {
        "nameObj": {
            "name": "DateExpires",
            "title": "DateExpires",
            "variable": "DateTime"
        },
    }
}, 
{
    "test": {
        "nameObjSomethingElse": {
            "name": "DateExpires",
            "title": "DateExpires",
            "variable": "DateTime"
        },
    }
}, 
{
    "test": {
        "nameObjSomethingElse": {
            "name": "DateExpires",
            "title": "DateExpires",
           "anotherLevel": {
            "variable": "DateTime"
           }
        }
    }
}];
const variables = [];
JSON.stringify(obj, (key, val) => {
  if (key === 'variable') {
    variables.push(val);
  }
  return val;
});
console.log(variables);

或者,如果您想更多地手动递归:

const obj = [{
    "test": {
        "nameObj": {
            "name": "DateExpires",
            "title": "DateExpires",
            "variable": "DateTime"
        },
    }
}, 
{
    "test": {
        "nameObjSomethingElse": {
            "name": "DateExpires",
            "title": "DateExpires",
            "variable": "DateTime"
        },
    }
}, 
{
    "test": {
        "nameObjSomethingElse": {
            "name": "DateExpires",
            "title": "DateExpires",
           "anotherLevel": {
            "variable": "DateTime"
           }
        }
    }
}];
const recurse = (obj, arr=[]) => {
  Object.entries(obj).forEach(([key, val]) => {
    if (key === 'variable') {
      arr.push(val);
    }
    if (typeof val === 'object') {
      recurse(val, arr);
    }
  });
  return arr;
};
console.log(
  recurse(obj)
);

关于javascript - 无论对象数组中的深度如何,获取键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57200340/

相关文章:

javascript - 使用 harp.gl 从 geojson 画一条线

javascript - 将数组转换为动态对象

php - 如何将变量从一页上的输入框传递到另一页并使用此信息在第 2 页上执行搜索?

php - 实时多人游戏技术

javascript - Kendo DatePicker 使用 javascript 清除输入,占位符被移除

javascript - ruby on rails 中的 Ajax flash 消息

javascript - 退回 Javascript 第二阶段的浏览器 'back' 按钮?

javascript - 组织对象数组

javascript - Jquery 等待 AJAX 调用完成

javascript - 如何避免graphql请求中的代码重复?