创建新属性后的 JSON 空属性

json null property after creating new property

本文关键字:属性 JSON 创建 新属性      更新时间:2023-09-26
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声明时看不到空是从哪里来的?此外,您还可以看到它没有像其他方式那样增加。

如果

jsonArr[i].val不存在,则需要将属性设置为 1

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]++;
    }
}

您尚未为 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; 
}