jsonArr = [
{
"val": "0"
},
{
"val": "1"
},
{
"val": "2"
},
{
"val": "2"
},
{
"val": "2"
},
{
"val": "0"
},
{
"val": "0"
},
{
"val": "4"
}
];
var val = {};
for (var i = 0; i < jsonArr.length; i++) {
if (val.hasOwnProperty(jsonArr[i].val)) { // if the property exists
val[jsonArr[i].val] = 1; // create new property
} else {
val[jsonArr[i].val] ++; // increase
}
}
console.log(JSON.stringify(val));
Console.log
正在吐出{"0":1,"1":null,"2":1,"4":null}
,在我宣布= 1
时,我不知道null来自哪里?此外,你可以看到它没有增加,否则它应该增加。
答案 0 :(得分:2)
如果1
不,则需要将属性设置为jsonArr[i].val
:
var val = {};
for (var i = 0; i < jsonArr.length; i++) {
if (!val.hasOwnProperty(jsonArr[i].val)) {
val[jsonArr[i].val] = 1;
} else {
val[jsonArr[i].val]++;
}
}
答案 1 :(得分:2)
您没有为val[jsonArr[i].val] ++;
设置值,而是尝试增加它。
首先,当该值不存在时,您必须将其设置为1.
for (var i = 0; i < jsonArr.length; i++) {
val[jsonArr[i].val] = val[jsonArr[i].val] ? val[jsonArr[i].val]++ : 1;
}
我使用了一个三元运算符来检查val
对象中属性的值。如果它不存在,则将其设置为1,否则递增其值。
如果你正在考虑表现:
for (var i = 0; i < jsonArr.length; i++) {
var value = jsonArr[i].val; // this will avoid some lookup
val[value] = val[value] ? val[value]++ : 1;
}