如何访问 javascript 中的多重嵌套子对象?
How can I access multiply nested sub objects in javascript?
我有一个更大的代码来处理和排序数据。在其中,我想使用对象来保持它更容易和更好的结构。我有多个类别,它们都有不同的嵌套子对象,我无法访问这些子对象 writing/reading。
我在网上搜索了 w3schools 但没有找到我的错误,很抱歉这个入门级的问题!
我写了一个测试函数来更好地理解对象!
function test(){
var report, time, name, date, value;
report = 'Income Statement';
time = 'Annually';
name = 'Revenue';
date = '2017';
value = '10000000';
data = {}
data[report] = {}
data[report][time] = {}
data[report][time][name] = {}
data[report][time][name][date] = value;
console.log(data);
}
根据我的理解,这段代码的作用是:
-创建一个空对象数据
- 创建一个空的子对象报告
- 创建一个空的子子对象时间
- 创建一个空的 subsubsubobject 名称
- 给 subsubsubobject 名称一个 key/value 对 date:value
(至少那是我的意图)
首先我尝试跳过创建空对象并直接填充数据{}:
数据 = {}
数据[报告][时间][名称][日期] = 值;但他似乎无法为此设置属性。
所以我像上面那样为所有子类别创建了编码的第一个空子对象,这真的有必要,还是我犯了一个简单的语法错误?
但是他仍然没有记录我想要的输出:
{ 'Income Statement': { Annually: { Revenue: {2017:10000000} } } }
而是给我:
{ 'Income Statement': { Annually: { Revenue: [Object] } } }
简单地说..我做错了什么? :D
提前感谢您提供的任何帮助!
最好的问候
正确!!我在控制台收到 { Income Statement: { Annually: { Revenue: {2017:10000000} } } }
作为你给定代码的输出。
您是否正在尝试使用 test() 将该数据保存在某个变量中??
如果是,那么您需要在函数测试定义的末尾使用 return data
而不是 consol.log(data)
.
我不认为你做错了什么。我在 JS 控制台中粘贴了相同的代码,它给出了正确的结果。
Screenshot of console with result of function
初始化对象的不同方式
- 静态数据
let data = {
'Income Statement': {
'Annually': {
'Revenue': {
'2017': '10000000'
}
}
}
}
document.querySelector("#data-result").innerHTML = JSON.stringify(data)
<div id="data-result"></div>
- 动态数据
var report, time, name, date, value;
report = 'Income Statement';
time = 'Annually';
name = 'Revenue';
date = '2017';
value = '10000000';
let data = {
[report]: {
[time]: {
[name]: {
[date]: value
}
}
}
}
document.querySelector("#object-result").innerHTML = JSON.stringify(data)
<div id="object-result"></div>
您还可以考虑不同的方式来存储相同的数据。
例子-
let data = [{
report: 'Income Statement'
time: 'Annually'
name: 'Revenue'
date: '2017'
value: '10000000'
}]
所以现在,如果您希望将来按日期显示数据,您可以使用过滤器
let data_2017 = data.filter(x => x.date === '2017');
我有一个更大的代码来处理和排序数据。在其中,我想使用对象来保持它更容易和更好的结构。我有多个类别,它们都有不同的嵌套子对象,我无法访问这些子对象 writing/reading。 我在网上搜索了 w3schools 但没有找到我的错误,很抱歉这个入门级的问题!
我写了一个测试函数来更好地理解对象!
function test(){
var report, time, name, date, value;
report = 'Income Statement';
time = 'Annually';
name = 'Revenue';
date = '2017';
value = '10000000';
data = {}
data[report] = {}
data[report][time] = {}
data[report][time][name] = {}
data[report][time][name][date] = value;
console.log(data);
}
根据我的理解,这段代码的作用是: -创建一个空对象数据 - 创建一个空的子对象报告 - 创建一个空的子子对象时间 - 创建一个空的 subsubsubobject 名称 - 给 subsubsubobject 名称一个 key/value 对 date:value (至少那是我的意图)
首先我尝试跳过创建空对象并直接填充数据{}: 数据 = {} 数据[报告][时间][名称][日期] = 值;但他似乎无法为此设置属性。 所以我像上面那样为所有子类别创建了编码的第一个空子对象,这真的有必要,还是我犯了一个简单的语法错误?
但是他仍然没有记录我想要的输出:
{ 'Income Statement': { Annually: { Revenue: {2017:10000000} } } }
而是给我:
{ 'Income Statement': { Annually: { Revenue: [Object] } } }
简单地说..我做错了什么? :D
提前感谢您提供的任何帮助! 最好的问候
正确!!我在控制台收到 { Income Statement: { Annually: { Revenue: {2017:10000000} } } }
作为你给定代码的输出。
您是否正在尝试使用 test() 将该数据保存在某个变量中??
如果是,那么您需要在函数测试定义的末尾使用 return data
而不是 consol.log(data)
.
我不认为你做错了什么。我在 JS 控制台中粘贴了相同的代码,它给出了正确的结果。
Screenshot of console with result of function
初始化对象的不同方式
- 静态数据
let data = {
'Income Statement': {
'Annually': {
'Revenue': {
'2017': '10000000'
}
}
}
}
document.querySelector("#data-result").innerHTML = JSON.stringify(data)
<div id="data-result"></div>
- 动态数据
var report, time, name, date, value;
report = 'Income Statement';
time = 'Annually';
name = 'Revenue';
date = '2017';
value = '10000000';
let data = {
[report]: {
[time]: {
[name]: {
[date]: value
}
}
}
}
document.querySelector("#object-result").innerHTML = JSON.stringify(data)
<div id="object-result"></div>
您还可以考虑不同的方式来存储相同的数据。
例子-
let data = [{
report: 'Income Statement'
time: 'Annually'
name: 'Revenue'
date: '2017'
value: '10000000'
}]
所以现在,如果您希望将来按日期显示数据,您可以使用过滤器
let data_2017 = data.filter(x => x.date === '2017');