Javascript 更新数组中的对象
我试图更新数组中的一个对象,该对象是双向绑定到指令的,但它根本不起作用 我正在执行以下操作来更新它:Javascript 更新数组中的对象,javascript,angularjs,Javascript,Angularjs,我试图更新数组中的一个对象,该对象是双向绑定到指令的,但它根本不起作用 我正在执行以下操作来更新它: $filter('filter') ($scope.offers, {id: offer_id})[0].status = "active"; 我没有收到任何控制台错误,但如果在执行筛选代码后输入console.log$scope.offers,则状态不会更新 我试图完成的是用新值更新$scope.offers数组中的对象。数组中的每个对象都有一个唯一的id属性,我正试图
$filter('filter')
($scope.offers, {id: offer_id})[0].status = "active";
我没有收到任何控制台错误,但如果在执行筛选代码后输入console.log$scope.offers,则状态不会更新
我试图完成的是用新值更新$scope.offers数组中的对象。数组中的每个对象都有一个唯一的id属性,我正试图通过该属性来选择它
希望这些信息足够。谢谢 这里您正在更新筛选表达式的结果状态 这意味着$filter'filter'$scope.offers,{id:offer_id}本身返回一个数组。您正在更新该数组,而不是实际数组 我相信,$scope.offers是双向绑定的,您不会更新它 我希望这有点道理。如果你能解释清楚你到底想要什么。然后我可以再放一些光 编辑 所以,我认为一旦你得到了新的状态值和你需要更新的id。您可以简单地使用simpleforloop迭代数组,并检查id是否匹配,然后更新状态。像这样的
for(var i=0; i<array.length; i++) {
if (array[i].id === requiredId) {
array[i].status = newStatus;
break;
}
}
希望,这会有所帮助。下面的updateArrObj函数使用本机JS方法搜索与指定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,状态:'inactive'},
{id:2,状态:'inactive'},
{id:3,状态:'inactive'},
{id:4,状态:'inactive'},
{id:5,状态:'inactive'}
];
var updated=updateArrObjarrObj,3,{status:'active'};
document.write
“已更新:”+已更新++
;
函数updateArrObjarr,id,update{
返回arr.somefunction findObjobj{
如果obj.id==id{
Object.KeyUpdate.forEachfunction updateObjkey{
obj[key]=更新[key];
};
返回true;
}
};
}筛选器不用于修改objectsOh。。我发现一个堆栈溢出帖子,有人试图用过滤器完成我正在做的事情。我想我应该检查一下文件。你知道如何完成我想做的事情吗?我已经更新了帖子,提供了更多关于我想完成的事情的信息。更新了我的答案。你可以检查一下。我试图找到一个实用函数来完成这一点,而不是必须编写一个循环,但我将使用它来让它工作,并在以后重构。对不起,这篇文章让人困惑。非常感谢!!在这种情况下,您可以创建一个自定义筛选器,并将id和新状态传递给它。您可以在自定义过滤器中添加此循环。但请确保使用过滤器的输出更新实际模型。