我正在努力解决以下问题:
我有一个嵌套对象。从服务器我得到一个带有更改值的对象的响应。所以我想在嵌套对象中找到对象并替换它。
我的对象有这样的结构:
rails g migration AddColumnToTable column_name:datatype ...
从服务器我得到一个新对象:
$scope.page = {
id: 5,
label: 'myPage',
items : [
{
"type": "Container",
"id": 1,
"label": "header",
"items": [
{
"type": "Container",
"id": 2,
"label": "left",
"items": [
{
"type": "Menu",
"label": "settings-menu",
"id": "5"
},
{
"type": "Menu",
"label": "main-menu",
"id": "7"
}
]
},
{
"type": "Container",
"id": 4,
"label": "right",
"items": [
{
"type": "Post",
"label": "contact",
"id": "25"
}
]
}
]
},
{
"type": "Postlist",
"label": "nieuwsberichten",
"id": "17"
},
{
"type": "HTML",
"label": "over deze site",
"id": "18"
},
{
"type": "Other",
"label": "twitter feed",
"id": "19"
}
]
}
如何以正确的方式更新$ scope.page中的对象?我尝试过以下方法:
var newItem = {
"type": "Post",
"label": "contact",
"id": "25"
}
和
$scope.findAndReplace(newItem,$scope.page.items);
$scope.findAndReplace = function(newItem, items) {
for (var i = 0; i < items.length; i++) {
if (items[i].id == newItem.id) {
items[i] = newItem;
} else if (items[i].items) {
$scope.findAndReplace(newItem, items[i].items);
}
}
}
这些选项都不起作用。这是因为嵌套循环中的对象不再是$ scope.page中的对象。
有人想要解决这个问题吗?
答案 0 :(得分:0)
您的示例看起来不错,无法理解他们为什么不工作。
这些选项都不起作用。这是因为嵌套循环中的对象不再是$ scope.page中的对象。
您可以使用angular.copy(newItem, oldItem)
答案 1 :(得分:0)
嗨,我为你创造了一个小提琴。 click for fiddle
for(var indx=0; indx < $scope.page.items.length; indx++) {
var tmpObj = $scope.page.items[indx];
if(tmpObj.hasOwnProperty('items')) {
// check inside
for(var indx1=0; indx1<tmpObj.items.length; indx1++ ) {
var innerObj = tmpObj.items[indx1];
// check for next level
if(innerObj.hasOwnProperty('items')) {
for(var counter=0; counter< innerObj.items.length; counter++) {
var thirdTmp = innerObj.items[counter];
console.log('3rd level inner object', thirdTmp);
if(thirdTmp.id === newItem.id) {
innerObj.items[counter] = newItem;
tmpObj.items[indx1] = innerObj;
$scope.page.items[indx] = tmpObj;
}
}
}
}
} else if(tmpObj.id === newItem.id) {
$scope.page.items[indx] = newItem;
}
};