Суммируйте значения в объекте jQuery по ключу
У меня есть файл CSV, преобразованный в объект jQuery с использованием jQuery CSV ( https://github.com/evanplaice/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
и т.п.
Как я могу это сделать?
2 ответа
Вам нужно использовать 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);
}
});
Вы используете локальную переменную sum
внутри $.each
, какое значение переназначается на каждой итерации, а ваша переменная bushels_per_day
является string
набрано, поэтому JS просто объединяет это значение с sum
значение
Попробуй это. У меня сработало