我正在尝试更新数组中的对象,该数组与指令双向绑定但它根本不起作用。
我正在执行以下操作来更新它:
$filter('filter')
($scope.offers, {id: offer_id})[0].status = "active";
我没有控制台错误,但如果我在执行过滤器代码后调试console.log $ scope.offers,则状态不会更新。
我想要完成的是使用新值更新$ scope.offers数组中的对象。数组中的每个对象都有一个唯一的id
属性,我试图通过它来选择它。
希望这些信息足够。谢谢!
答案 0 :(得分:0)
此处您正在更新过滤器表达式的结果状态。
这意味着$filter('filter')($scope.offers, {id: offer_id})
本身会返回一个数组。而你正在更新那个数组,而不是实际的数组。
我相信,$scope.offers
是双向绑定的,你没有更新它。
我希望这有一定道理。如果你能解释你想要什么。然后我可以多点亮一点。
修改强>
所以,我认为一旦你获得了新的状态值和你需要更新的id。您可以使用简单的for
循环简单地迭代数组并检查id,如果匹配则更新状态。这样的事情。
for(var i=0; i<array.length; i++) {
if (array[i].id === requiredId) {
array[i].status = newStatus;
break;
}
}
希望,这有帮助。
答案 1 :(得分:0)
使用本机JS方法,下面的updateArrObj
函数使用some
来搜索与指定的id
匹配的对象,然后使用更通用的更新方法将更新对象映射到原始物体。使用some
的主要好处是双重的:你得到一个布尔值来指示是否发生了更新,并且在更新后它将停止搜索数组。
function updateArrObj(arr, id, update) {
return arr.some(function findObj(obj) {
if (obj.id === id) {
Object.keys(update).forEach(function updateObj(key) {
obj[key] = update[key];
});
return true;
}
});
}
var arrObj = [
{id: 1, status: 'inactive'},
{id: 2, status: 'inactive'},
{id: 3, status: 'inactive'},
{id: 4, status: 'inactive'},
{id: 5, status: 'inactive'}
];
var updated = updateArrObj(arrObj, 3, {status: 'active'});
document.write(
'<h3>Updated: ' + updated + '</h3>' +
'<pre>' + JSON.stringify(arrObj, null, 4) + '</pre>'
);
function updateArrObj(arr, id, update) {
return arr.some(function findObj(obj) {
if (obj.id === id) {
Object.keys(update).forEach(function updateObj(key) {
obj[key] = update[key];
});
return true;
}
});
}
&#13;