从对象获取特定值

时间:2015-04-30 12:43:19

标签: arrays

(我正在使用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);

3 个答案:

答案 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;
&#13;
&#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);