更新数组

时间:2015-07-07 21:51:06

标签: javascript angularjs

我正在尝试更新数组中的对象,该数组与指令双向绑定但它根本不起作用。

我正在执行以下操作来更新它:

   $filter('filter')
        ($scope.offers, {id: offer_id})[0].status = "active";

我没有控制台错误,但如果我在执行过滤器代码后调试console.log $ scope.offers,则状态不会更新。

我想要完成的是使用新值更新$ scope.offers数组中的对象。数组中的每个对象都有一个唯一的id属性,我试图通过它来选择它。

希望这些信息足够。谢谢!

2 个答案:

答案 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;
   }
  });
}

&#13;
&#13;
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;
&#13;
&#13;