【问题标题】:Sum values in jQuery object by key通过键对jQuery对象中的值求和
【发布时间】:2016-01-21 21:39:25
【问题描述】:

我有一个使用 jQuery CSV (https://github.com/evanplaice/jquery-csv/) 转换为 jQuery 对象的 csv 文件。

下面是代码:

    $.ajax({
        type: "GET",
        url: "/path/myfile.csv",
        dataType: "text",
        success: function(data) {
        // once loaded, parse the file and split out into data objects
        // we are using jQuery CSV to do this (https://github.com/evanplaice/jquery-csv/)

        var data = $.csv.toObjects(data);
    });

我需要对对象中的键值求和。具体来说,我需要将公司的 bushels_per_day 值加起来。

对象格式如下:

    var data = [
        "0":{
            beans: "",
            bushels_per_day: "145",
            latitude: "34.6059253",
            longitude: "-86.9833417",
            meal: "",
            oil: "",
            plant_city: "Decatur",
            plant_company: "AGP",
            plant_state: "AL",
            processor_downtime: "",
        },
        // ... more objects
    ]

这不起作用:

    $.each(data, function(index, value) { 
        var capacity = value.bushels_per_day;
        var company = value.plant_company.replace(/\W+/g, '_').toLowerCase();
        var sum = 0;
        if (company == 'agp') {
            sum += capacity;
            console.log(sum);
        }
    });

它只是返回每个公司的前导零的值:

0145

0120

060

等等

我该怎么做?

【问题讨论】:

  • 您的数据包含字符串,需要使用parseInt()转成数字。
  • 那是"0" 的实际属性吗?如果是这样,那不是一个有效的数组...数组没有键/值对,对象有。
  • @timeJV - 它是一个对象。

标签: jquery each jquery-csv


【解决方案1】:

您需要使用parseInt() 将字符串转换为数字。否则,+` 进行字符串连接而不是加法。

另外,您需要在循环外初始化sum。否则,您的总和每次都会被清除,并且您不会计算总数。

var sum = 0;
$.each(data, function(index, value) { 
    var capacity = parseInt(value.bushels_per_day, 10);
    var company = value.plant_company.replace(/\W+/g, '_').toLowerCase();
    if (company == 'agp') {
        sum += capacity;
        console.log(sum);
    }
});

【讨论】:

  • Barmar - 你是最接近的 - 不幸的是我还不能投票给你。这将返回每次迭代的总和。例如,它返回 145、195、255、... 740(我知道是总数)。我怎样才能得到最后的总数?
  • 如此明显 - 只是 console.log(sum) 在循环之外。感谢您的帮助!
【解决方案2】:

您在$.each 中使用了一个局部变量sum,该值在每次迭代时都会重新分配,而您的变量bushels_per_daystringtyped,所以JS 只需将它的值与sum 值连接起来

试试this。它对我有用

【讨论】:

    猜你喜欢
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2016-12-11
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    相关资源
    最近更新 更多