我的控制器中有$scope.notys
数组ng-repeat
:
<li ng-repeat="x in notys" class="item js-item">
...
从我的控制器中我将数据推送到这样的数组:
$scope.notys.push(data);
每个data
都有唯一标识属性data.id
问题是如何更新/替换属性与来自ajax的最后data.id
相同的对象?
所以我需要做这样的事情:
从ajax获取data
现在从ajax获得data.id
我需要检查$scope.notys
是否存在具有相同data.id
的对象
如果存在,则将其替换为最后一个数据,如果不存在,则只替换push
数据
答案 0 :(得分:0)
您可以使用array.reduce
将数组缩减为键值对(id-index)。如果id作为键存在,那么您可以轻松获得索引。然后,您可以array.splice
使用该索引来拼接旧的并放入新的。
var arr = [{id:1, value:'foo'},{id:2, value:'bar'}]
var idIndexMap = arr.reduce(function(carry, item){
carry[item.id] = item.value;
return carry;
}, {});
var newItem = {id:1, value: 'baz'};
var indexOfExisting = idIndexMap[newItem.id];
if(indexOfExisting !== undefined) arr.splice(indexOfExisting, 1, newItem);
document.write(JSON.stringify(arr));
答案 1 :(得分:0)
我找到了这个简单的解决方案:
angular.forEach($scope.notys, function (value, key) {
if(value.id === data.id) $scope.notys.splice(key,1);
});
$scope.notys.push(data);
首先,如果元素存在具有相同的id,则删除元素,然后按下新元素。