Я думаю, что проблема в $scope.delivery_items[k][i].push(val);
k
измените его на v
и посмотрите, что произойдет.
EDIT:
Хорошо, после того, как раз, глядя на ваш вопрос, я думал, что это может работать лучше:
if ($scope.categories_norm) {
$scope.delivery_items = {}; // create empty object
//get categories
angular.forEach(data.item_categories.normal_categories, function (v, k) {
var catagery = v.category_name; // create cataogry variable scoped to this block
$scope.delivery_items[category] = {}; //create empty category object using category name as the key
if ($scope.items) {
angular.forEach($scope.items.filter(check_item_category(v.item_category_id)), function (val, key) {
$scope.delivery_items[category][category_info] = v; // comment out or omit this line if you don't want category information included within the category
$scope.delivery_items[category][val.item_name] = val; // set item object to it's corosponding name
});
};
});
}
function check_item_category (category_id) {
return function(item) {
return item.item_category_id == category_id
}
}
Вы все еще будете иметь, чтобы заполнить биты этого (а именно, как получить названия категорий и предметов), но это должно быть то, что вы хотите.
EDIT: я переключился на использование фильтра, мне просто не понравилось видеть проверку идентификатора для каждого элемента, я думаю, что использование фильтра будет просто чище.
EDIT:
Он должен закончить с таким объектом:
{
"category_1" : {
"category_info" : category_object,
"item_1" : item_1_object,
"item_2" : item_2_object
}
"category_2" : {
"category_info" : category_object,
"item_1" : item_1_object,
"item_2" : item_2_object,
"item_3" : item_3_object,
}
"category_3" : {
"category_info" : category_object,
"item_1" : item_1_object,
"item_2" : item_2_object,
"item_3" : item_3_object,
}
}
EDIT: Хорошо, один последний раз, я снова посмотрел на это и понял, что это можно сделать быстрее (восстанавливающим время $scope.items
итерируется) и в то же время удалит дублирование данных (имя элемента находится как в ключе, так и в объекте элемента).
Пожалуйста, обратите внимание, однако, вы не будете хранить объект категории наряду с категорией вы должны использовать это решение
if ($scope.categories_norm) {
$scope.delivery_items = get_items_sorted_by_category(data.item_categories.normal_categories,$scope.items) // create empty object
});
}
function get_items_sorted_by_category(categories,items) {
var filled_object = {}
for(var category in categories){
//will need to change how you set the catagory name as I don't know how this object looks
filled_object[category.name] = items.filter(check_item_category(category.item_category_id)) // will filter out any objects that don't have the correct caragory ID
};
return filled_object;
}
function check_item_category (category_id) {
return function(item) {
return item.item_category_id == category_id
}
}
вы должны получить объект, который выглядит следующим образом:
{
"category_1" : [
"item_1",
"item_2",
"item_3"
]
"category_2" : [
"item_1",
"item_2",
"item_3"
]
"category_3" : [
"item_1",
"item_2",
"item_3"
]
}
, какая линия это ошибка? – Thermatix
$ scope.delivery_items [k] [i] .push (val); – rZaaaa