在Javascript对象中保持未知项计数
我正在分析一个数据源,并希望在JS中填充一个对象,以完成如下操作:在Javascript对象中保持未知项计数,javascript,object,Javascript,Object,我正在分析一个数据源,并希望在JS中填充一个对象,以完成如下操作: data = { "USA": {"NY":{"active":5,"inactive":2}}, {"WA":{"active":16,"inactive":11}}, "Canada": {"NY":{"active":5,"inactive":2}} } var data = {} data["USA"]["NY"]["active"] = data["U
data = {
"USA":
{"NY":{"active":5,"inactive":2}},
{"WA":{"active":16,"inactive":11}},
"Canada":
{"NY":{"active":5,"inactive":2}}
}
var data = {}
data["USA"]["NY"]["active"] = data["USA"]["NY"]["active"]++;
一开始,我不知道我将获得多少国家或州的数据。所以我开始是这样的:
data = {
"USA":
{"NY":{"active":5,"inactive":2}},
{"WA":{"active":16,"inactive":11}},
"Canada":
{"NY":{"active":5,"inactive":2}}
}
var data = {}
data["USA"]["NY"]["active"] = data["USA"]["NY"]["active"]++;
然后尝试像这样填充数据:
data = {
"USA":
{"NY":{"active":5,"inactive":2}},
{"WA":{"active":16,"inactive":11}},
"Canada":
{"NY":{"active":5,"inactive":2}}
}
var data = {}
data["USA"]["NY"]["active"] = data["USA"]["NY"]["active"]++;
但它不起作用。您需要对对象的每个级别进行检查,如果未设置,则将对象作为默认值或数字为零
var data={};
数据[“美国”]=数据[“美国”]|{};
数据[“美国”][“纽约”]=数据[“美国”][“纽约”]|{};
数据[“美国”][“纽约”][“活跃”]=数据[“美国”][“纽约”][“活跃”]| 0;
数据[“美国”][“纽约”][“活动”]+;
控制台日志(数据)代码>
你是:
取数据[“美国”][“纽约”][“活动”]
的值(即2)
递增数据[“美国”][“纽约”][“活动”]
(因此现在是3)
将所取的值(2)分配给数据[“美国”][“纽约”][“活动”]
(有效地逆转了上一步的效果)
如果要增加该值,请执行以下操作:
data["USA"]["NY"]["active"]++;
…仅此而已,仅此而已。您不能以这种方式动态创建对象属性。因此,您正在正确创建数据对象:
var data = {}
但下一行是错误的,因为:
数据[“USA”]
此时未定义,因此您无法访问未定义的[“NY”]
,这将引发异常。因此,您不仅需要初始化根数据
对象,还需要为该对象的每个属性初始化一个对象
你可以按字面意思做:
if(!data["USA"])
data["USA"] = {};
或者使用| |
操作符,如果存在相同的对象,则将该对象分配给数据[“USA”]
(因此基本上不起作用),或者创建一个新对象:
data["USA"] = data["USA"] || {};
现在,您需要对无法访问的每个对象执行此逻辑。因此,使用较短的语法:
data["USA"] = data["USA"] || {};
data["USA"]["NY"] = data["USA"]["NY"] || {};
data["USA"]["NY"]["active"] = data["USA"]["NY"]["active"] || 0;
在这之后,您的对象结构就准备好了,请记住,++
是一个返回数字的操作符,然后再向该数字添加一个
因此:
不会更改号码,您必须执行以下任一操作:
data["USA"]["NY"]["active"]++;
或:
您可以使用reduce()
创建自己的函数,该函数可以将字符串作为嵌套对象键并构建深层对象结构
var data={}
函数添加(str){
var arr=str.split(“.”)
返回arr.reduce(函数(r,e,i){
返回arr.length-1!=i?r[e]| |(r[e]={}):r[e]=(r[e]| | 0)+1
},数据)
}
添加('USA.NY.active')
添加('USA.NY.active')
添加('USA.NY.inactive')
添加('Canada.NY.active')
console.log(数据)