js查找对象数组元素中的key,如果有则替换,没有则添加

发布于 2022-09-06 10:45:12 字数 1143 浏览 13 评论 0

现在有一数组,我需要判断里面是否有我当前的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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

冧九 2022-09-13 10:45:12

题主可能是逻辑弄晕了,你看对不对

// 已经有答案则判断是否该题答案
let isExist = false;
for (let i in answers) {
    let questionId = answers[i].questionId;
    if (id === questionId) {
        isExist = true;
        break;
    }
}
if (isExist) {
    // 如果存在答案则替换原答案
    this.$store.commit('delIndex', i);
    this.$store.commit('addAnswer', data);
    console.log('我要替换原来答案', data);
} else {
    // 否则直接提交
    this.$store.commit('addAnswer', data);
    console.log('初次提交答案', data);
}

前面的 for 循环优化下:

let isExist=answers.some((val,index)=>{
    return id===val[index].questionId;
});
俯瞰星空 2022-09-13 10:45:12

MDN官网有这么一段话

clipboard.png

所以for...in在这里并不可靠
此处在循环前保存一个length,用下标遍历就好了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文