在 JavaScript 中从嵌套 JSON 对象获取键的值
在给定的问题陈述中,我们被要求借助 JavaScript 功能从嵌套 JSON 对象获取键的值。在 Javascript 中,我们可以借助点符号或括号符号解决并访问 JSON 数据对象。
在开始为给定的问题编写代码之前,让我们先了解一下 JSON 对象到底是什么:
什么是 JSON 和嵌套 JSON 对象?
JSON 的全称是 Javascript 对象符号。它是一种标准的基于文本的格式,用于显示结构化数据。它主要用于在 Web 应用程序中传输数据,这意味着我们可以将数据发送到服务器,服务器可以以 JSON 格式发回数据。
嵌套 JSON 对象意味着 JSON 文件中存在的对象可以嵌套在其他对象中。并且相同的字段名称也可以位于嵌套对象中。但每个嵌套对象都应该有一个唯一的路径。
{
"name": "Super Hero",
"homeTown": "Metro City",
"birthYear": 2000,
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"powers": ["Radiation resistance", "Turning tiny", "Radiation blast"]
},
{
"name": "Madame Uppercut",
"age": 39,
"powers": [ "Million tonne punch", "Damage resistance"]
},
}
上述问题的逻辑
在 Javascript 中,使用点符号和括号符号访问嵌套 JSON 对象中键值的最简单方法。
因此,乍一看,我们将使用嵌套 JSON 数据结构来访问其键。访问对象键有两种方法:第一种是点符号,第二种是括号符号。我们还可以创建一个函数来访问键。
以下是使用和不使用函数访问嵌套 JSON 对象的键的算法和代码:
算法 - 不使用函数
步骤 1:声明一个 Json 对象并将其命名为数据。此数据包含名称、年龄、地址等对象。地址具有街道、城市和州等嵌套属性。
步骤 2:现在我们将从上面定义的数据中访问名称和街道。因此,我们将在这里使用点符号来访问它并在控制台上打印。
步骤 3:在使用点符号访问名称和街道地址后,现在我们将借助括号符号访问年龄和州属性。并在控制台上显示输出。
示例
// 示例 JSON 对象
const data = {
"name": "John",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Anytown",
"state": "CA"
}
};
// 使用点符号访问嵌套属性
const name = data.name;
const street = data.address.street;
console.log("我的名字是:" + name + ", 街道地址是:" + street);
// 使用括号符号访问嵌套属性
const age = data["age"];
const state = data["address"]["state"];
console.log("我的年龄是:" + age + ", 州是:" + state);
输出
我的名字是:John,街道地址是:123 Main St 我的年龄是:30,州是:CA
算法 - 使用函数
步骤 1: 声明一个名为 data 的 Json 对象。此数据包含名称、年龄、地址等属性。并且地址有三个嵌套对象,如街道、城市和州。
步骤 2: 创建嵌套 JSON 对象后,我们将定义一个名为 getNestedKeys 的函数来访问 JSON 数据的嵌套键。在这个函数中,我们启动了一个 if 条件,即检查键是否直接存在于 json 数据中,如果条件为真,则返回其值。
步骤 3: 如果数据不是直接存在的,并且数据是嵌套的,那么我们将定义一个名为 keys 的变量,它用点表示嵌套数据。
步骤 4: 定义另一个名为 value 的变量,它保存名为 obj 的 json 数据。并初始化一个 for 循环,它将运行直到键的长度。并找出嵌套的键值对。如果找到数据,则返回它,否则返回未定义。
步骤 5: 这就是上述函数的工作方式。现在调用创建的函数并打印嵌套键的值。
示例
// Example JSON object
const data = {
"name": "John",
"age": 30,
"address": {
"street": "421 Main Street",
"city": "Anytown",
"state": "CA"
}
};
// 访问嵌套属性的函数
function getNestedKeys(obj, key) {
if (key in obj) {
return obj[key];
}
const keys = key.split(".");
let value = obj;
for (let i = 0; i < keys.length; i++) {
value = value[keys[i]];
if (value === undefined) {
break;
}
}
return value;
}
// 使用 getNestedKeys 方法获取键的值
const name = getNestedKeys(data, "name");
const age = getNestedKeys(data, "age");
const street = getNestedKeys(data, "address.street");
const state = getNestedKeys(data, "address.state");
console.log("Name: ", name);
console.log("Age: ", age);
console.log("Street: ",street);
console.log("State: ",state);
输出
Name: John Age: 30 Street: 421 Main Street State: CA
复杂性
上述算法使用点符号和括号符号,其时间复杂度平均为 O(1)。这是因为我们只使用一种符号(点符号或括号符号)访问对象属性,这涉及在哈希表中直接查找对象。因此哈希表具有恒定的时间复杂度。而函数算法使用 O(n) 时间来执行函数,其中 n 是 JSON 对象中的属性数。因为函数需要遍历每个对象来查找键。并且此方法的空间复杂度也是 O(n)。因为它是一个递归调用,它会向堆栈添加一个新的调用框架。
结论
在此代码中,我们实现了访问键值的不同方式,并使用函数来访问键。在上述算法中,我们访问 JavaScript 对象中的嵌套属性,这是一种快速有效的方法,具有恒定的时间复杂度。因为点符号和括号符号。这些符号被广泛用于访问 JSON 键。
相关文章
有用资源
javascript 参考教程 - 该教程包含有关 javascript 的更多信息:https://www.cainiaomax.com/javascript/

