2016-07-15 2 views
0

У меня есть функция связана с завода для моего контроллера:AngularJS: Как создать новые массивы из ответа JSON?

fac.GetDailyCountersList = function() { 
    return $http.get('/Data/GetDailyCountersList') 
} 

Внутри контроллера, вот где функция называется:

$scope.DailyCounters = null; 
DailyCounterService.GetDailyCountersList().then(function (d) { 
    $scope.DailyCounters = d.data; 
}, function (error) { 
    alert('Error!'); 
}); 

Исходя из этого, если бы я был для вывода переменной на странице HTML, это покажет:

[{"Id":1,"MIDay":"16","MITime":"900","MICounter":0}, 
{"Id":2,"MIDay":"16","MITime":"915","MICounter":1}, 
{"Id":3,"MIDay":"16","MITime":"930","MICounter":0}, 
{"Id":4,"MIDay":"17","MITime":"945","MICounter":0}, 
{"Id":5,"MIDay":"17","MITime":"1000","MICounter":0}, 
{"Id":6,"MIDay":"17","MITime":"1015","MICounter":52}, 
{"Id":7,"MIDay":"18","MITime":"1030","MICounter":2}, 
{"Id":8,"MIDay":"18","MITime":"1045","MICounter":3}, 
{"Id":9,"MIDay":"18","MITime":"1100","MICounter":0}] 

Мой вопрос заключается в том, чтобы взять эти данные и создать другие массивы на основе одного из свойств Json данные.

Например, как бы я поставил массивы

{"Id":1,"MIDay":"16","MITime":"900","MICounter":0}, 
{"Id":2,"MIDay":"16","MITime":"915","MICounter":1}, 
{"Id":3,"MIDay":"16","MITime":"930","MICounter":0} 

В новый массив "ArrayDay16"? Остальное - в их соответствующие массивы.

Я думал о делать это таким образом:

var myArray = []; 
if (d.data['MIDay'] == '16') 
    myArray.push(d.data); 

Но это неверно/не удается. Любые идеи для эффективного решения?

+1

Читайте на [методов Array из JavaScript, особенно 'push'] (HTTPS : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push). –

ответ

0

Используйте функцию filter для заполнения новых массивов. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

//This will populate "someArray" with only the data that has MIDAY = 16 
DailyCounterService.GetDailyCountersList().then(function (d) { 
    $scope.someArray = d.data.filter(function(ele) { 
     return ele.MIDAY === '16'; 
    }); 
} 
+0

спасибо! Так оно и было! – NoReceipt4Panda

0

Вы можете использовать filter функцию:

var daySixteen = data.filter(function (d) { return d.MIDay === "16"; }); 
+0

Спасибо также! Это сделал трюк! – NoReceipt4Panda

0

вы можете попробовать следующее:

d.data.foreach(function(item){ 
    if(item.MIDay == 16) 
     myArray.push(d.data); 
}); 
0

Если вы хотите, чтобы быть эффективным, вы должны сделать это на заднем конце с ограничение (ы). Это не работа браузеров.

Хотя, если вы все еще хотите, чтобы фильтровать его на переднем конце, вы можете использовать фильтр-функцию с некоторыми lamdba выражениями

var newList = oldList.filter(i => i["MIDay"] == "16");