我使用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 */
非常感谢。
答案 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';
<小时/>
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;
旧浏览器check polyfill option of find method。
更新:如果您要更新具有该特定id
的所有元素,请使用 Array#forEach
方法进行迭代。实际上,您不需要 Array#find
方法,因为您只想更新该值。
$scope.replyList.forEach(function(v) {
if(v.id == 85475) v.reply_content = 'dddddd';
});
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;
答案 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');