如何迭代json对象列表

How to iterate over a json object list?

本文关键字:json 对象 列表 迭代 何迭代      更新时间:2023-09-26

我很难对json对象中"B"的所有值求和。我希望控制台日志显示所有"B"值的总和。

var voltot = 0;
$.each(json,function(k,v){
    voltot = v.B += voltot ;
    //console.log(v.B);
});
console.log(voltot);

这是我的完整JSON对象。

var json=
[
    {
        "a": "OOCBER",
        "b": "OOCL BERLIN",
        "c": "CHINA",
        "d": "GREAT BRITAIN",
        "e": "*PI",
        "f": "NGB",
        "g": "CN",
        "i": "GB",
        "n": 9,
        "o": 6,
        "p": "2015-09-14",
        "q": "2015-09-14",
        "s": 4,
        "u": "40HC",
        "v": "TRLU7564566",
        "w": "CN0794909",
        "x": "LEIGH",
        "y": "NINGBO",
        "z": 395,
        "B": 68.8,
        "C": 7987.5,
    },
    {
        "a": "OOCBER",
        "b": "OOCL BERLIN",
        "c": "CHINA",
        "d": "GREAT BRITAIN",
        "e": "*PI",
        "f": "NGB",
        "g": "CN",
        "i": "GB",
        "n": 9,
        "o": 6,
        "p": "2015-09-14",
        "q": "2015-09-14",
        "s": 4,
        "u": "40HC",
        "v": "TCLU8306124",
        "w": "CN0786008",
        "x": "OXFORDSHIRE",
        "y": "NINGBO",
        "z": 412,
        "B": 68,
        "C": 8790.5,
    }
]

我正在为如何求和json对象中"B"的所有值而苦苦挣扎。我希望控制台日志显示所有"B"值的总和。

var voltot = 0;
$.each(json,function(k,v){
    voltot = v.B += voltot ;
    //console.log(v.B);
});
console.log(voltot);

这是错误的

voltot = v.B += voltot ;

像这样制作

voltot += v.B;

voltot = v.B + voltot ;

从数组中获取唯一值的首选方法是array.prototype.reduce方法,该方法采用回调函数和起始值(它数组缩减为单个值)。你可以这样使用它:

json.reduce(function(total, current) { return typeof current.B === "number" ? total + current.B : total; }, 0);

这是一个JSFiddle。

这是JSFiddle。我只是缩小了json和post。尝试使用完整的json数组

var json=
[
    {
        "z": 395,
        "B": 68,
        "C": 7987.5,
    },
  {
        "z": 395,
        "B": 68,
        "C": 7987.5, 
    }
];
var voltot = 0;
$.each(json,function(k,v){
    voltot += v.B;
});
console.log(voltot);

运算符+=不正确@RiccardoC的回答是正确的。

此外,您不需要使用jquery来求和这些值。您可以简单地执行以下

var voltot=0;
json.forEach(function(element) {voltot+=element.B})

forEach函数将为数组的每个元素运行回调