创建新属性后的json null属性

时间:2015-04-09 17:17:35

标签: javascript

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来自哪里?此外,你可以看到它没有增加,否则它应该增加。

2 个答案:

答案 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; 
}