AngularJS按给定密钥更新数组项

时间:2016-09-20 17:22:50

标签: javascript angularjs arrays

我使用AngularJS创建网站。

我的阵列:

$scope.replyList = [
  {
    "id": "85485",
    "reply_content": "aaaaaaa",
    "reply_gender": "1",
    "reply_author": "John"
  },
  {
    "id": "85487",
    "reply_content": "bbbbbbb",
    "reply_gender": "1",
    "reply_author": "Ben"
  },
  {
    "id": "85504",
    "reply_content": "ccccccc",
    "reply_gender": "1",
    "reply_author": "Wang"
  }
]

我想要做的是通过给定的密钥id更新项目值。

例如,我想更新ID为85485的内容。你怎么能处理这个?

$scope.replyList[{id: 85475}].reply_content = 'dddddd'; /* failed */

非常感谢。

3 个答案:

答案 0 :(得分:6)

使用 Array#find 方法获取数组元素。

$scope.replyList.find(function(v) {
  return v.id == 85475;
}).reply_content = 'dddddd';

// or with ES6 arrow function 

$scope.replyList.find(v => v.id == 85475).reply_content = 'dddddd';

<小时/>
&#13;
&#13;
var replyList = [{
  "id": "85475",
  "reply_content": "aaaaaaa",
  "reply_gender": "1",
  "reply_author": "John"
}, {
  "id": "85487",
  "reply_content": "bbbbbbb",
  "reply_gender": "1",
  "reply_author": "Ben"
}, {
  "id": "85504",
  "reply_content": "ccccccc",
  "reply_gender": "1",
  "reply_author": "Wang"
}];

replyList.find(function(v) {
  return v.id == 85475;
}).reply_content = 'dddddd';

console.log(replyList);
&#13;
&#13;
&#13;

旧浏览器check polyfill option of find method

更新:如果您要更新具有该特定id的所有元素,请使用 Array#forEach 方法进行迭代。实际上,您不需要 Array#find 方法,因为您只想更新该值。

$scope.replyList.forEach(function(v) {
   if(v.id == 85475) v.reply_content = 'dddddd';
});

&#13;
&#13;
var replyList = [{
  "id": "85475",
  "reply_content": "aaaaaaa",
  "reply_gender": "1",
  "reply_author": "John"
}, {
  "id": "85487",
  "reply_content": "bbbbbbb",
  "reply_gender": "1",
  "reply_author": "Ben"
}, {
  "id": "85504",
  "reply_content": "ccccccc",
  "reply_gender": "1",
  "reply_author": "Wang"
}];

replyList.forEach(function(v) {
  if (v.id == 85475) v.reply_content = 'dddddd';
});

console.log(replyList);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

使用数组的.filter方法获取结果的第一个位置

$scope.replyList.filter(function(item){
  return item.id === '85475';
})[0].reply_content = 'dddddd';

如果存在多个具有给定键值的结果,请使用.map方法处理它们。

$scope.replyList
  .filter(function(item){
    return item.id === '85475';
  })
  .map(function(item){
     item.reply_content = 'ddddd'
     return item;
   });

利用javascript功能方法!!

答案 2 :(得分:0)

使用一个简单的for循环迭代数组并找到具有匹配id的对象并替换内容。这将适用于所有浏览器。

function replace(array, id, content) {
    var len = array.length,
        i;

    for (i = 0; i < len; i++) {
        if (array[i].id === id) {
            array[i].reply_content = content;
        }
    }
};

replace($scope.replyList, '85485', 'replacedcontent');