gpt4 book ai didi

jquery - 重构数据对象上的 jQuery 每个循环

转载 作者:行者123 更新时间:2023-12-01 07:52:23 25 4
gpt4 key购买 nike

我有一个使用 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://code.google.com/p/jquery-csv/)

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

我正在按公司添加bushels_per_day值,并希望重构我的代码以使其更加紧凑。

使用这个答案:Sum values in jQuery object by key ,我可以使用 $.each(); 循环遍历

对象格式如下:

    var data = [
"0":{
bushels_per_day: "145",
plant_city: "Decatur",
plant_company: "AGP",
},
"1":{
bushels_per_day: "125",
plant_city: "Cedar Rapids",
plant_company: "AGP",
},
"2":{
bushels_per_day: "345",
plant_city: "Ralston",
plant_company: "AGP",
},
"3":{
bushels_per_day: "55",
plant_city: "Dawson",
plant_company: "ADM",
},
"4":{
bushels_per_day: "55",
plant_city: "Dawson",
plant_company: "ADM",
},
// ... more objects
]

这是 $.each() 循环:

    var sumADM = 0;
var sumAGP = 0;
// var for each company



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


if (company == 'adm') {
sumADM += capacity;
}
if (company == 'agp') {
sumAGP += capacity;
}
// ... and so on for each company
});

console.log(sumADM, sumAGP); // and so on.

这可行,但我如何重构它,以便我不需要每个公司的 sum 变量和 if 语句?目前,sum 变量和 console.log() 必须位于循环之外才能返回正确的总计。

有没有更好、更紧凑的方法来做到这一点?

最佳答案

您可以将总和作为属性放在对象上:

var sums = {
ADM: 0,
AGP: 0
};

$.each(data, function (index, value) {
var capacity = parseInt(value.bushels_per_day, 10);
var company = value.plant_company.replace(/\W+/g, '_').toUpperCase(); // Note change here

sums[company] += capacity;
});

console.log(sums.ADM, sums.AGP); // and so on.

或者在循环中输出它们:

Object.keys(sums).forEach(function(company) {
console.log(sums[company]);
});

如果公司不同,您甚至可以执行惰性初始化:

var sums = {};

$.each(data, function (index, value) {
var capacity = parseInt(value.bushels_per_day, 10);
var company = value.plant_company.replace(/\W+/g, '_').toUpperCase();

sums[company] = (sums[company] || 0) + capacity;
});

Object.keys(sums).forEach(function(company) {
console.log(sums[company]);
});

方式sums[company] = (sums[company] || 0) + capacity;线路的工作原理是,如果我们以前没有见过该公司,sums[company]将是undefined 。自 undefined JavaScript 的 curiously-powerful || operator 是假的将采用右侧操作数值 ( 0 ) 作为结果。如果我们见过 company,情况也是如此。之前和sums[company]0 ,不过没关系,一个 00 。所有其他值( 1 等)都是真实的,所以 sum[company] || 0将是1等等(左侧操作数的值)。

<小时/>

旁注:注意我正在使用toUpperCase而不是toLowerCase在公司字符串上,因此它们与属性匹配。

关于jquery - 重构数据对象上的 jQuery 每个循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28216506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com