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和新状态传递给它。您可以在自定义过滤器中添加此循环。但请确保使用过滤器的输出更新实际模型。