2015-04-30 3 views
0

(Я работаю с Угловым, но это не проблема с угловым выражением). У меня есть объект json, который я пытаюсь отключить. Я пытался разобраться с этим и придумал сложный скрипт с вложенными циклами, которые не работают. Объект состоит из 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); 

Я не уверен, что ??? должно быть.

решил:

просто удалив имя сделал трюк.

+0

Это смотрит на меня, как это на самом деле не имеет ничего общего с Угловое. Не могли бы вы отредактировать вопрос и дать понять, есть ли у вас проблема с отображением данных или вместо этого вычисляется сумма? – AlexMA

+0

Это не «угловая» проблема, правда. Будет редактировать. – Mischa

ответ

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);

1

Что вам нужно, это filter:

var fruits = $filter('filter')(object, {date: $choosenDate}, true); 

Затем, если вы хотите разделить плоды по типу, вы можете использовать angular.forEach для перебора на Нев fruits Var

+0

Это похоже на то, что я хочу, но он не будет работать так, потому что атрибут date не находится в том же массиве, что и соответствующее значение. Я обновил свой OP. – Mischa

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);

+0

Я знаю, что они массивы странные, но это то, с чем я имею дело в данный момент. – Mischa

+0

Понял - это была не критика, а попытка юмора. – AlexMA

+0

все еще так новичок в этом, что я беру все серьезно, я думаю: P – Mischa

Смежные вопросы