js查找对象数组元素中的key,如果有则替换,没有则添加
现在有一数组,我需要判断里面是否有我当前的questionId,如果有则用一个js对象替换,没有则直接添加。我想用for循环的方式来查找,但是总会被添加好多次,请大家帮忙看下:
即:用temp里面的questionId和data里面的questionId进行比较,如果data里面有这个questionId,则用temp里面的answer替换相应的answer,如果data里面没有这个questionId,则直接添加temp数据到data。
问题:我用for循环遍历的时候,总会重复添加数据,就是说每次都会重复遍历数据。
let data=[
{answer:"30",questionId:"34",type:"1"},
{answer:"42",questionId:"35",type:"1"}
];
// 当前选中的选项数据
let temp={
type:1,
answer:optionId,//对应上面的数字30,42
questionId:radio.questionnaireQuestionsId//对应上面的数字34,35
}
// 取回store中的答案
let data=this.$store.state.answers;//就是最上面的data
// 当前问题id
let id=temp.questionId;
if(answers.length==0){
// 如果所有题目都未作答则直接提交
this.$store.commit('addAnswer', data);
console.log('开始作答')
}else {
// 已经有答案则判断是否该题答案
for(let i in answers) {
let questionId = answers[i].questionId;
if(id==questionId){
// 如果存在答案则替换原答案
this.$store.commit('delIndex',i);
this.$store.commit('addAnswer',data);
console.log('我要替换原来答案',data);
}else if(id!=questionId){
// 否则直接提交
this.$store.commit('addAnswer',data);
console.log('初次提交答案',data)
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
题主可能是逻辑弄晕了,你看对不对
前面的 for 循环优化下:
MDN官网有这么一段话
所以
for...in
在这里并不可靠此处在循环前保存一个
length
,用下标遍历就好了