(我正在使用Angular,但这不是角度特定的问题)。我有一个json对象,我试图分析。我一直试图解决这个问题,并提出了一个复杂的脚本,其中嵌套的for循环无效。该对象由3个数组组成。第一个数组是字段名数组。第三个数组是一个数组数组,对应于字段名称,如下所示:
object = {"fields" : [array], "type" : [array], "values" : [array]}
其中:
fields = ["user","bananas","pies","apples","pears","mangos","date"]
values = [["Bongo","12","2","1","2","4","05-02-2015"], ["Mongo","12","23","15","22","43","05-02-2015"], ["Congo","15","32","21","23","44","06-02-2015"]]
我想要做的是计算所有用户在特定日期的水果数量。例如,我想知道所有用户在“06-02-2015”上有多少香蕉。
我可以发布我的代码,但我认为这只会令人困惑,因为它可能是错误的和多余的。
更新
我已经尝试了过滤器但无法使其工作,因为object.values中的值没有名称。所以我认为它应该是这样的:
var fruits = $filter('filter')(object.value, {???[6] : "2015-04-29 00:00:00"}, true);
我不确定是什么???应该是。
解决:
只需删除名称即可。
var fruits = $filter('filter')(object.value, "2015-04-29 00:00:00", true);
答案 0 :(得分:1)
您需要的是filter:
var fruits = $filter('filter')(object, {date: $choosenDate}, true);
然后,如果您想按类型拆分水果,可以使用angular.forEach来迭代nev fruits
var
答案 1 :(得分:1)
此脚本应按日期对值进行分组:
var fields = ["user","bananas","pies","apples","pears","mangos","date"];
var values = [["Bongo","12","2","1","2","4","05-02-2015"], ["Mongo","12","23","15","22","43","05-02-2015"], ["Congo","15","32","21","23","44","06-02-2015"]];
var result = {};
for (var j = 0; j < values.length; j++) {
if (!result.hasOwnProperty(values[j][fields.length - 1]))
result[values[j][fields.length - 1]] = {};
for (var i = 1; i < fields.length - 1; i++) {
if (!result[values[j][fields.length - 1]][fields[i]])
result[values[j][fields.length - 1]][fields[i]] = parseInt(values[j][i], 10);
else
result[values[j][fields.length - 1]][fields[i]] += parseInt(values[j][i], 10);
}
}
console.log(result);
&#13;
答案 2 :(得分:1)
如果阵列的结构不是香蕉,那么这将简单得多,可以这么说。
var fields = ["user","bananas","pies","apples","pears","mangos","date"];
var values = [["Bongo","12","2","1","2","4","05-02-2015"], ["Mongo","12","23","15","22","43","05-02-2015"], ["Congo","15","32","21","23","44","06-02-2015"]];
var date, dataArray, dateIndex = (fields.length - 1),
dates = {};
for (var i = 0; i < values.length; i++) {
dataArray = values[i];
date = dataArray[dateIndex];
dates[date] = dates[date] || {};
for (j = 1; j < fields.length - 1; j++) {
dates[date][fields[j]] = dates[date][fields[j]] || 0;
dates[date][fields[j]] += Number(dataArray[j]);
}
}
console.log(dates);